当我使用JSR 168中的Jsf中的Command Button调用另一个portlet时,我无法从URl接收参数。 实际上我从命令按钮调用manageBean的方法,在那里我生成URL,并调用另一个Portlet。但是我无法在另一个Called Portlet的manageBean中接收参数。
任何人都可以告诉我哪里出错了。
答案 0 :(得分:1)
检索JSR 168 Portlet URL参数;你有三种选择之一(据我所知):
在Websphere Application Server级别创建过滤器并配置动态高速缓存以存储查询字符串,即使不使用URL映射考虑到大小,也可以将任何参数附加到任何portlet生成的链接动态缓存。
您必须在早期的portlet生命周期阶段捕获该参数,该阶段称为“doView”,并将RenderRequest强制转换为HttpServletRequest 那么你将能够从getQueryString()方法中检索它们(即使规范提到了这一点,你也无法从RenderRequest的getParameter方法中捕获它们),之后你可以调度到应用程序中的任何页面。
第三种方法,如果您尝试使用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-class>
中的portlet.xml
portlet来创建项目。