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