标签: vtl

在Velocity中包含文字JSON内容(避免HTML转义)

我正在尝试使用Atlassian产品中嵌入的Velocity引擎(并通过com.atlassian.templaterenderer公开)将JSON值替换为模板.

在模板中,这看起来有点像以下内容:

<script>
  foo = $foo
</script>
Run Code Online (Sandbox Code Playgroud)

但是,当我使用映射到字符串的"foo"呈现模板时["bar", "baz"],输出如下:

<script>
  foo = [&quot;bar&quot;, &quot;baz&quot;]
</script>
Run Code Online (Sandbox Code Playgroud)

如何避免这种情况?

velocity vtl

4
推荐指数
1
解决办法
920
查看次数

获取速度列表中的项目数

我正在为Liferay网站创建一组自定义模板和结构.

一个结构提供可重复的部分,其匹配模板然后迭代.

但是,出于样式的原因,我需要知道可重复部分的实际存在的实例数,并且循环之前我需要知道.

所以,模板代码是这样的:

#foreach($thisChunk in $chunk.getSiblings())
    [emit some HTML]
#end
Run Code Online (Sandbox Code Playgroud)

我想在foreach 之前做一些条件逻辑,并在包含元素上发出不同的CSS类名,具体取决于有多少$ chunk.

任何想法如何访问兄弟姐妹的数量而不首先循环它们?

velocity vtl liferay

4
推荐指数
1
解决办法
1万
查看次数

添加到列表打印速度为真

我正在尝试将一些字符串值添加到 Velocity 中的列表中。当我运行代码时,它工作正常。但是它添加值的行打印为真。在 Velocity 中总是这样吗?我是 Velocity 模板的新手,所以无法自己弄清楚。

#set ($uniqueInterfaces     =   [])
#if($ipv4interfaceName == $ipv6interfaceName)
    $uniqueInterfaces.add($ipv4interfaceName)
#end
Run Code Online (Sandbox Code Playgroud)

它是带有嵌套 foreach 的较大代码的一部分。它有两个匹配项,所以输出是:

true
true
Run Code Online (Sandbox Code Playgroud)

我根本不需要打印这个真实的!

apache velocity vtl

4
推荐指数
1
解决办法
3091
查看次数

AWS API Gateway - 如何在正文映射模板中获取日期/时间戳/纪元?

我需要在API网关方法的正文映射模板中包含请求时间.有日期/时间变量或功能吗?我在模板参考中找不到任何内容.

示例正文映射模板:

Action=SendMessage&MessageBody=$util.urlEncode("{""timestamp"":""TIMESTAMP_HERE"",""body-json"":$input.json('$'),""params"":""$input.params()""}")
Run Code Online (Sandbox Code Playgroud)

vtl amazon-web-services aws-api-gateway

4
推荐指数
2
解决办法
3774
查看次数

如何在速度模板中为 API 网关中的请求/响应映射添加生成随机 UUID 等功能

我正在为 AWS API 网关创建请求映射模板。在该模板中,我想根据某些条件自定义请求参数并应用运算符。

 #foreach($header in $input.params().header.keySet())
     #if($header=="id")#set($idVal = 
     $util.escapeJavaScript($input.params().header.get($header)))
         #if($idVal.matches("^[0-9a-f]{4}-[0-9A-Z]{3}$"))
             "$header":"$idVal"
         #else
           #set($random = UUID.randomUUID())
          "$header":"$random"
         #end
     #else
Run Code Online (Sandbox Code Playgroud)

例如,在上面基于 if 条件的模板中,我想生成 randomUUID 并添加到标题中。但是当我测试时,id 值设置为空字符串。

如何在速度模板映射 api 网关中使用包和 java 函数支持?另外,请分享对格式良好的模板的任何参考,了解更多信息会非常有用。

templates vtl amazon-web-services aws-lambda aws-api-gateway

3
推荐指数
1
解决办法
2910
查看次数

VTL 中的美元和感叹号 (bang) 符号

我最近在一些 Velocity 代码中遇到了这两个变量:

$!variable1
!$variable2
Run Code Online (Sandbox Code Playgroud)

我对它们的相似性感到惊讶,所以我对代码的正确性产生了怀疑,并对找出两者之间的差异感兴趣。

速度是否可能允许这两个符号的任何顺序或它们有不同的目的?你知道答案吗?

velocity vtl dollar-sign

2
推荐指数
1
解决办法
1464
查看次数

Velocity(VM)模板请求参数:获取GET变量

如何访问VM模板中URI中传递的GET变量?

这仅在加载小部件URL时有效:

$request.get("parameters").get("fav").get(0)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个可以使用友好URL的简洁解决方案.

这是我的测试模板:

<br><br><br>
#set($url = $request.attributes.CURRENT_URL)

<h2>url: $url</h2>

#set($favs = $url.split("fav="))
favs: $favs<br>
favs.size(): $favs.size() <br>
#if($favs.size() > 1)
  #set($fav1 = $favs.get(1).split("&").get(0))
  fav1: $fav1<br>
#else
  No fav!
#end
#if($favs.size() > 2)
  #set($fav2 = $favs.get(2).split("&").get(0))
  fav2: $fav2<br>
#end

#set($favs2 = $httpUtil.getParameterMap($url, "fav"))
favs2: $favs2

<hr>
<h3>Fav?</h3>
<form method="get">
  <input type="checkbox" name="fav" value="dave"/> Dave<br>
  <input type="checkbox" name="fav" value="nate"/> Nate<br>
  <input type="checkbox" name="fav" value="taylor"/> Taylor<br>
  <input type="submit" value="Send"/>
</form>
<hr>
<div style="font-size: 9px;">request: $request</div>
Run Code Online (Sandbox Code Playgroud)

velocity vtl liferay liferay-velocity

1
推荐指数
1
解决办法
2万
查看次数