0

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

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

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

不知道这个问题有多少是特定于 IBM Websphere Portal 或只是简单的 JSR286 portlet。

4

3 回答 3

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)
}
于 2014-12-12T18:32:49.913 回答
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

于 2015-06-09T00:18:25.300 回答
0

使用 primefaces 桥时要小心,它为我们提供了 PortletUtils.getHttpServletRequest 方法是 RenderRequestWrapper 类型的对象,因此有 q 执行以下操作:

HttpServletRequest requestInsideThePortlet = PortletUtils
.getHttpServletRequest (((RenderRequestWrapper) PortletRequest)
.getPortletRequest ());

有了这个,我们得到了 HttpServletRequest 而不是 null :)

于 2016-09-21T18:31:26.080 回答