使用Jsr 168在jsf门户中使用命令Button传递URL参数

时间:2010-09-20 05:04:14

标签: url jsr168

当我使用JSR 168中的Jsf中的Command Button调用另一个portlet时,我无法从URl接收参数。  实际上我从命令按钮调用manageBean的方法,在那里我生成URL,并调用另一个Portlet。但是我无法在另一个Called Portlet的manageBean中接收参数。

任何人都可以告诉我哪里出错了。

1 个答案:

答案 0 :(得分:1)

检索JSR 168 Portlet URL参数;你有三种选择之一(据我所知):

  1. 在Websphere Application Server级别创建过滤器并配置动态高速缓存以存储查询字符串,即使不使用URL映射考虑到大小,也可以将任何参数附加到任何portlet生成的链接动态缓存。

  2. 您必须在早期的portlet生命周期阶段捕获该参数,该阶段称为“doView”,并将RenderRequest强制转换为HttpServletRequest 那么你将能够从getQueryString()方法中检索它们(即使规范提到了这一点,你也无法从RenderRequest的getParameter方法中捕获它们),之后你可以调度到应用程序中的任何页面。

  3. 第三种方法,如果您尝试使用URL生成标记生成指向portlet的链接,则可以将该参数添加到该链接,并通过以下相同的方式在doView中捕获该参数:

  4. <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-class>中的portlet.xml portlet来创建项目。