簡體   English   中英

JSF 2.1重定向到Portlet

[英]JSF 2.1 Redirect to a portlet

我將liferay從1.2升級到6.0,並將JSF升級到2.1。 我現有的代碼

 ((ActionResponse)context.getExternalContext().getResponse()).sendRedirect( redirect );
context.responseComplete();

此處的重定向定義如下:

String redirect = "/namingportal/group/customercenter/accountSearch";

上面的URL是必須將請求重定向到的Portlet頁面。

開始中斷並出現以下錯誤:java.lang.IllegalStateException:設置渲染參數已在com.liferay.portlet.ActionResponseImpl.sendRedirect(ActionResponseImpl.java:48)處調用

經過一番谷歌搜索,我認為以上代碼應替換為以下代碼:

解決方案1:

context.getExternalContext().redirect(redirect);

當我嘗試使用解決方案1時,它給我錯誤FacesFileNotFound /namingportal/group/customercenter/accountSearch.xhtml,它實際上是在尋找xhtml而不是在portlet。

我的web.xml中也有這個:

<context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
    </context-param>

請讓我知道是否存在使用Liferay 6.0和JSF 2.1從JSF托管bean方法重定向到portlet的其他方法。

謝謝

該網橋符合ExternalContext.redirect(String)的JSR 329規范要求,該規范提供了實現所需功能的標准方法。

在大多數情況下,網橋假定ExternalContext.redirect(String)是JSF導航規則觸發的一部分。 但是,有兩種方法可以使其適合您的情況:

1)將Bridge.DIRECT_LINK參數添加到URL中,值為“ true”:

String redirect = "/namingportal/group/customercenter/accountSearch?javax.portlet.faces.DirectLink=true";
externalContext.redirect(redirect);

2)將網址設為絕對,例如:

PortletRequest portletRequest = externalContext.getRequest();
ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute("THEME_DISPLAY");
String portalURL = themeDisplay.getPortalURL();
String redirect = portalURL + "/namingportal/group/customercenter/accountSearch";
externalContext.redirect(redirect);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM