Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Liferay portlet:从javascript重定向到另一个jsp页面_Javascript_Jsp_Liferay_Portlet_Alloy Ui - Fatal编程技术网

Liferay portlet:从javascript重定向到另一个jsp页面

Liferay portlet:从javascript重定向到另一个jsp页面,javascript,jsp,liferay,portlet,alloy-ui,Javascript,Jsp,Liferay,Portlet,Alloy Ui,我想从js重定向到liferay portlet中的另一个jsp页面。我发现的想法是使用渲染器。我发现的第一步可以帮助我的最佳代码是: <a id="renderURLWithJS" href=""> This render URL link is created with Javascript</a> <aui:script> AUI().use('liferay-portlet-url', function(A) { var param="

我想从js重定向到liferay portlet中的另一个jsp页面。我发现的想法是使用渲染器。我发现的第一步可以帮助我的最佳代码是:

<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>

AUI().use('liferay-portlet-url',函数(A){
var param=“Hello new jsp”;
var renderUrl1=Liferay.PortletURL.createRenderURL();
renderUrl1.SetWindowsState(“”);
renderUrl1.setParameter(“param”,param);
renderUrl1.setParameter('mvcPath','display.jsp');/*这是否正确*/
renderUrl1.setPortletMode(“”);
A.one(“#renderURLWithJS”).set('href',renderUrl1.toString());
});
但问题是我总是被重定向到同一个实际页面(view.jsp),而不是我想要display.jsp的jsp页面


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

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

因此,在本例中,您必须设置
renderUrl1.setPortletId(“…您的portlet id”)
让portlet看到
mvcPath
param

此外,
mvcPath
必须是绝对的(以
/
开头),并且在配置的
模板路径下(默认为
/
)。

尝试以下操作:

在您的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>
最后一点注意:从Liferay 6.2开始,将使用上面OP中提到的javascript方法创建portlet URL

  • 不包括身份验证令牌(p_auth,p_p_auth)
  • 门户无法将其转换为友好URL

另请参阅此页上的。

谢谢@Tobias Liefke的回答。但这并没有解决问题。我添加了这一行:renderUrl1.setPortletId('objectllclogin\u WAR\u objectllcloginportlet');我检查了链接这是我发现的代码是Liferay自己在其他URL中呈现的portletID吗?例如,如果您的portlet是可实例化的,它还必须包含一个instanceId。是的,这是我找到的唯一Id,我得到的实例Id是nullI make it/display.jsp,我在portlet.xml中添加了:template path/我想这就是你的意思,但它没有解决问题。你的两个jsp都驻留在同一个portlet中吗?是的,它在同一个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);

}