在IBM Websphere Portal 8.5中,如何从JSR286 portlet中的URL中检索查询字符串参数?
似乎HTTPServletRequest没有传递给PortletRequest。我是否需要在portlet.xml中使用配置?这似乎用于管理portlet之间的通信,但无论如何我试图使用它,但没有成功,每个ParameterNames和ParameterMap都是空的。
我是否需要设置一些拦截器/过滤器来预处理参数?
不确定这个问题有多少是关于IBM Websphere Portal或仅仅是普通的JSR286 portlet。
答案 0 :(得分:0)
仅使用portlet规范,我不相信无论如何都可以访问HttpRequest。其背后的想法是,由于portlet不能完全控制整个HTTP请求/响应(portlet容器),因此portlet不能访问这些对象。
IBM Portal确实有一个API,您可以调用它来获取它,但是如果您需要它可以用于像您这样的场景。这是我们在Portal 8.0上运行的一个项目的缩写代码示例。如果API在8.5中发生了变化,请仔细检查文档。
import com.ibm.wps.pb.utils.portlet.PortletUtils;
...
public void doView(RenderRequest request, RenderResponse response) {
HttpServletRequest httpRequest = PortletUtils.getHttpServletRequest(request)
}
答案 1 :(得分:0)
尝试(另一种选择):
import com.ibm.ws.portletcontainer.portlet.PortletUtils;
public HttpServletRequest getHttpServletRequest(PortletRequest request) {
return PortletUtils.getHttpServletRequest(request);
}
您必须在本地maven存储库中安装jar(com.ibm.ws.portletcontainer.jar)。
这个jar位于:WebSphere / AppServer / plugins
答案 2 :(得分:0)
使用primefaces bridge时要小心,这给了我们方法PortletUtils.getHttpServletRequest是一个RenderRequestWrapper类型的对象,所以有q执行以下操作:
HttpServletRequest requestInsideThePortlet = PortletUtils
.getHttpServletRequest (((RenderRequestWrapper) PortletRequest)
.getPortletRequest ());
用这个我们得到HttpServletRequest而不是null:)