2010-09-20 32 views
0

當我使用JSR 168中的Jsf中的命令按鈕調用另一個Portlet時,我無法接收來自URl的參數。 實際上,我正在調用我的manageBean從我生成URL的Command Button中調用另一個Portlet。但是我無法在調用的Portlet的另一個manageBean中接收參數。使用命令傳遞URL參數使用Jsr的jsf門戶中的按鈕168

任何人都可以告訴我我哪裏出錯了。

回答

1

檢索JSR 168 Portlet URL參數;你有三個選擇之一(據我所知):

  1. 創建在WebSphere Application Server級別的過濾器,並配置動態緩存來存儲查詢字符串,那麼你就可以得到任何參數附加到任何即使不考慮動態緩存的大小,也不使用URL映射。

  2. 你必須捕捉到早期的portlet生命週期階段被稱爲「的doView」和鑄造的RenderRequest到HttpServletRequest的 參數,那麼你將能夠從getQueryString()方法來檢索他們(你將不能夠從RenderRequest的getParameter方法中捕獲它們(即使規範提到了這一點)),然後您可以發送到應用程序中的任何頁面。

  3. 第三種方式,如果你嘗試生成一個鏈接,使用URL生成標記的portlet時,你被允許通過如下相同的方式向參數添加到該鏈接並捕獲它的doView:

<wps:urlGeneration contentNode="MyApp.app" portletWindowState="Maximized" newWindow="True"> 
    <wps:urlParam name="MyParam" value="Hi There"/> 
    <a href="<% wpsURL.write(out); %>" target="_blank" >My Link</a> 
</wps:urlGeneration> 

public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { 
    HttpServletRequest httpServletRequest = (HttpServletRequest) request; 
    System.out.println("The parameter is: "+httpServletRequest.getQueryString()); 
    super.doView(request, response);  
} 

注意事項:缺省情況下,Portlet生命週期的完整代碼將包含在一個包com.ibm.{your project name}中,RSA會在項目創建開始時詢問您是否希望它可用,並且如果您尚未提供它,可以通過在portlet.xml中覆蓋您的portlet的<portlet-class>來創建它。