在Websphere Portal 8.5上的JSR286 portlet中读取URL参数

时间:2014-12-09 19:33:06

标签: java portlet websphere-portal jsr286

在IBM Websphere Portal 8.5中,如何从JSR286 portlet中的URL中检索查询字符串参数?

似乎HTTPServletRequest没有传递给PortletRequest。我是否需要在portlet.xml中使用配置?这似乎用于管理portlet之间的通信,但无论如何我试图使用它,但没有成功,每个ParameterNames和ParameterMap都是空的。

我是否需要设置一些拦截器/过滤器来预处理参数?

不确定这个问题有多少是关于IBM Websphere Portal或仅仅是普通的JSR286 portlet。

3 个答案:

答案 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:)