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 变量的主要内容,如果未能解决你的问题,请参考以下文章