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

Posted

技术标签:

【中文标题】Velocity (VM) 模板请求参数:获取 GET 变量【英文标题】:Velocity (VM) template request parameters: Getting GET variables 【发布时间】:2012-01-15 02:14:43 【问题描述】:

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

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

$request.get("parameters").get("fav").get(0)

我正在寻找一种适用于友好 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>

【问题讨论】:

【参考方案1】:

我在糟糕的文档中找不到所谓的解决方案,所以我想出了这个:

#set($curl = $request.get("attributes").get("CURRENT_URL"))
#set($foo = $curl.split("foo="))
<hr>
#if($foo.size() > 1)
  #set($foo1 = $foo.get(1).split("&").get(0))
  foo1: $foo1
#end
<hr>
#if($foo.size() > 2)
  #set($foo2 = $foo.get(2).split("&").get(0))
  foo2: $foo2
#end
<hr>

【讨论】:

【参考方案2】:

另一个选择是使用 $httpUtil,这是一个注入 Velocity 模板的 Liferay 实用程序类。这样,您可以执行以下操作:

#set($url = $request.attributes.CURRENT_URL)
#set($singleValue = $httpUtil.getParameter($url, "foo", false))
#set($multipleValues = $httpUtil.getParameterMap($httpUtil.getQueryString($url)).foo)

【讨论】:

很好很简单,但我如何获得第二个同名参数? 您可以执行以下操作来获取某个参数的值列表:#set($vals = $httpUtil.getParameterMap($url).foo) 不幸的是,这也不起作用;它返回一个大小为 1 而不是 2 的字符串列表。 对不起,我犯了一个错误。 getParameterMap 只需要查询字符串作为参数,而不是整个 URL。所以当你这样做时它应该可以工作:$httpUtil.getParameterMap($httpUtil.getQueryString($url)).foo【参考方案3】:
$request.getParameter("parameterName")

【讨论】:

这很好用,当参数总是附加在 URL 中时(可以说具有不同的值)。因此,最好先检查空/真假可能值来评估它。

以上是关于Velocity (VM) 模板请求参数:获取 GET 变量的主要内容,如果未能解决你的问题,请参考以下文章

VM模板引擎语法

[Java] 模板引擎 Velocity 随笔

volocity加载模板&输出

在 Apache Velocity 模板语言中获取文件目录

如何在 AWS appSync 的 Apache Velocity 请求映射模板中操作字符串和数组

Apache Solr velocity模板注入RCE漏洞