Liferay portlet:从javascript重定向到其他jsp页面

Liferay portlet: redirect to an other jsp page from javascript

本文关键字:其他 jsp 页面 重定向 javascript portlet Liferay      更新时间:2023-09-26

我想从js重定向到生活portlet中的另一个jsp页面。我发现的想法是使用renderurl。我发现可以帮助我迈出第一步的最好的代码是:

<a id="renderURLWithJS" href=""> This render URL link is created with Javascript</a>
<aui:script>
    AUI().use('liferay-portlet-url', function(A) {
    var param="Hello new jsp"; 
    var renderUrl1 = Liferay.PortletURL.createRenderURL();
    renderUrl1.setWindowState("<%=LiferayWindowState.NORMAL.toString() %>");
    renderUrl1.setParameter("param",param);
    renderUrl1.setParameter('mvcPath', 'display.jsp'); /* is this correct???*/
    renderUrl1.setPortletMode("<%=LiferayPortletMode.VIEW %>");
    A.one("#renderURLWithJS").set('href',renderUrl1.toString());
    });
</aui:script>

但是问题是我总是被重定向到相同的实际页面(view.jsp),而不是我想要的jsp页面display.jsp。

有人知道我的代码有什么问题吗?

Liferay需要知道您添加到URL中的任何请求参数的目标portlet—否则它会忽略任何未知参数。目标portlet的ID要么定义为p_p_id,要么是参数的前缀(在这种情况下,您可以在一个URL中为多个portlet定义参数)。

因此,在您的情况下,您必须设置renderUrl1.setPortletId('...your portlet id');以让您的portlet看到mvcPathparam

另外,mvcPath必须是绝对的(以/开头),并且低于配置的templatePath(默认为/)。

试试这个:

在您的JSP中->

<portlet:renderURL var="myRenderURL">
  <portlet:param name="jspName" value="display.jsp" />
</portlet:renderURL>
<aui:a href="#" cssClass="myLink" label="Click me" />
<aui:script>
  A.one('.myLink').on('click', function () {
    window.location.href = '${myRenderURL}';
  });
</aui:script>

然后在java portlet类中->

@Override
public void doView(RenderRequest request, RenderResponse response) 
    throws IOException, PortletException {
  String jspName = ParamUtil.getString("jspName", "view.jsp");
  include("path/to/your/jsp/" + jspName, request, response);
}

最后一点:从Liferay 6.2开始,使用上面OP中提到的javascript方法创建的portlet url将

  • 不包含认证令牌(p_auth, p_p_auth)
  • 不被门户转换为友好的url。

请参阅Liferay文档