如何在 Liferay 6.2 中将 javascript 变量值传递给 <portlet:param/>

how to pass the javascript variable value to <portlet:param/> in Liferay 6.2

我正在使用 Liferay 6.2 社区,我想使用 renderrequest 创建 link。我有这样的代码:

<script>
for(var i = 0; i < 10; i++){
    var myUrl = "<portlet:renderURL var='renderOneUrl'> "+
            "<portlet:param name='action' value='renderOne' />"+
            "<portlet:param name='id' value='"+i+"' /></portlet:renderURL>"+
            "<a href='${renderOneUrl}'> Click to call render method</a>";
    $("div.link").append(myUrl);
}
</script>

这是 java 代码:

@RenderMapping(params = "action=renderOne")
public String handleRenderOneRequest(RenderRequest request,RenderResponse response,Model model){
 System.out.println("akh akh");
 String id = request.getParameter("id");
 System.out.println("id = "+id);
 //var id always received i not '0/1/2/3/etc'
 return "detail";
}

我的问题是为什么值形式 <portlet:param name='id' value='"+i+"' /> 总是收到 i(该变量的名称),而不是值形式 js.

小脚本以一种毫无意义的方式结合了服务器端和客户端处理。您尝试使用 JSP 标签 portlet:renderURL 和 JavaScript 变量 i 作为参数。

幸运的是,可以在 JavaScript 中创建 portlet url。

<script>
for(var i = 0; i < 10; i++){
    var myUrl = Liferay.PortletURL.createRenderURL();
    myUrl.setParameter('action', 'renderOne');
    myUrl.setParameter('id', i);

    var link = "<a href='" + myUrl.toString() + "'>Click to call render method</a>";
    $("div.link").append(link);
}

详情见Creating Portlet URLs in JavaScript