簡體   English   中英

如何在JSF-Portlet中創建Portlet URL

[英]How to create a portlet URL in JSF-Portlet

目標是使用以下代碼創建到Portlet的URL:

ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext();
RenderResponse response = (RenderResponse)ctx.getResponse();
PortletURL portletUrl = response.createRenderURL();
String url = portletUrl .toString();

但是,如果我在后備bean的JSF-actionListener方法中調用它,則會得到ClassCastException因為ctx.getResponse()卻給了我一個javax.portlet.ActionResponse

我知道可以從Portlet類中的doView方法訪問RenderResponse 但是,如何在我的支持bean中訪問它?

我想將鏈接放入電子郵件中,該電子郵件將用戶引導至portlet。 我正在使用WebSphere Portal 6.1。

呈現URL在Portlet生命周期中通常不可用。

  1. 考慮使用URL映射功能
  2. 考慮將Servlet與URL引擎服務一起使用以執行重定向

在這兩種情況下,您都不需要通常由Portal生成的龐大的編碼URL。 您將http://host/foo/bar用作入口點。

我在生產中使用了第二種方法。 唯一名稱被添加到目標頁面和portlet實例,以便於查找。 它們通過XMLAccess腳本添加到頁面配置中-在6.1版中的管理用戶界面中不可用。

我現在使用以下方法,這會導致一些(很少)工作負載開銷,但是效果很好:

  • doView方法中獲取RenderResponse
  • 使用PortletURL portletUrl = response.createRenderURL(); 並將此對象存儲在portlet會話中(我知道每個請求都可以)。
  • 在您的動作偵聽器方法中,檢索PortletURL對象,追加必要的參數,然后為任何內容呈現URL。

暫無
暫無

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

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