繁体   English   中英

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

[英]Reading URL parameters in a JSR286 portlet on Websphere Portal 8.5

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

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

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

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

仅使用portlet规范,我认为无论如何都无法访问HttpRequest。 其背后的想法是,由于Portlet不能完全控制整个HTTP Request / Response(Portlet容器可以控制),因此Portlet不能访问那些对象。

IBM Portal确实有一个API,您可以调用该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)
}

尝试(另一种选择):

import com.ibm.ws.portletcontainer.portlet.PortletUtils;

public HttpServletRequest getHttpServletRequest(PortletRequest request) {
        return PortletUtils.getHttpServletRequest(request);
    }

您必须在本地Maven存储库中安装jar(com.ibm.ws.portletcontainer.jar)。

该罐子位于:WebSphere / AppServer /插件

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM