Liferay portlet:重定向到带有 js 参数的新 jsp

Liferay portlet: redirect to a new jsp with a js parameter

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

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

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

有没有人建议我如何使用我的一个想法或可能是另一个想法来实现我想要的?

我终于找到了解决这个问题的方法。 我在 jsp 页面中添加了一个隐藏的 post 表单,它只包含一个输入和 posts 到这样的操作方法:

<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");
}

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

@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} 接收它并且一切正常。