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

时间:2015-11-18 04:41:06

标签: liferay liferay-6

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

<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的值形式。

1 个答案:

答案 0 :(得分:0)

scriptlet以一种没有意义的方式结合了服务器端和客户端处理。您尝试将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