Liferay portlet:使用js参数

时间:2015-09-14 09:48:24

标签: javascript ajax jsp liferay portlet

我正在开发一个liferay portlet。 我想要做的是打开一个新的jsp,向它发送一个来自javascript变量的URL参数。我想到了,我找到了两个想法:

1)使用ajax将js变量发送到jsp,然后在jsp中创建一个渲染url,其参数是从js接收的值。但是我如何将js变量发送到jsp我在互联网上找不到一个好的例子。

2)使用收到的参数在javascript中构建渲染网址,然后使用我找到的渲染网址从脚本本身重定向到新的jsp文件。对于这个想法,我发布了这个问题Liferay portlet: redirect to an other jsp page from javascript,但我还没有得到解决方案。

有人建议我如何使用我的想法实现我想要的东西,或者可能是另一个想法?

1 个答案:

答案 0 :(得分:0)

我终于找到了解决这个问题的方法。 我在jsp页面中添加了一个隐藏的帖子表单,其中只包含一个输入并发布到这样的操作方法:

<portlet:actionURL var="jsVarActionURL" name="jsVarAction"/>
<form:form name="JsVarModel" method="post" modelAttribute="JsVarModel" action="<%=jsVarActionURL.toString() %>">
    <form:input id="jsVar" type="text" path="receivedMessage" style="display:none;"/>
    <input id="submit" type="submit" value="Add" style="display:none;"></input>
</form:form>

所以我想要的是javascript中的某些条件我必须将js变量发送到新的jsp页面并打开它。所以在脚本中当条件有效时我将输入#jsVar设置为javascript值,并在提交按钮中创建一个虚拟单击按钮,其中jquery的触发器功能如下:

var jsToJsp="Hello jsp I'm a js variable"

if(/*condition*/)
{
    $("#jsVar").val(jsToJsp);
    $("#submit").trigger("click");
}

在控制器中,action方法将接收来自表单输入字段的值,然后将其重定向到render方法:

@RenderMapping(params={"action=displayPageRender"}) 
public ModelAndView openUserProfilPage(RenderRequest request,RenderResponse response,Model model) 
{
    ModelAndView modelAndView= new ModelAndView("display");
    modelAndView.addObject("jsVar", request.getParameter("jsVar"));
    return modelAndView;

}

@ActionMapping(value = "jsVarAction")
public void sessionKeyActionMethod(@ModelAttribute("JsVarModel")ActionReceiveModel jsVar,ActionRequest actionRequest, ActionResponse actionResponse,Model model)
{
    actionResponse.setRenderParameter("jsVar", jsVar.getMessage());
    actionResponse.setRenderParameter("action", "displayPageRender");
}

然后我可以在display.jsp中使用$ {jsVar}接收它,一切正常。