portlet是否可以读取其周围页面的请求参数?
E.g。 portlet所在页面的URL是http://example.com/mygroup/mypage?foo=bar是否可以从该页面上的portlet中读取“foo”参数?
Portlet Container是Liferay 6.0.5。
P.S。
我已经尝试过了:
com.liferay.portal.util.PortalUtil.getOriginalServletRequest(com.liferay.portal.util.PortalUtil.getHttpServletRequest((javax.portlet.PortletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest())).getParameter("foo")
但我总是为productId
获取null谢谢!
答案 0 :(得分:1)
你试过吗
ExternalContext.getRequestParameterMap()
答案 1 :(得分:1)
以下代码可以解决问题:
javax.portlet.PortletRequest pr = (javax.portlet.PortletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("javax.portlet.request");
java.lang.reflect.Method method = pr.getClass().getMethod("getOriginalHttpServletRequest");
HttpServletRequest httpServletRequest = (HttpServletRequest)method.invoke(pr, new Object[] {});
return httpServletRequest.getParameter(YOUR_PARAM_KEY);
答案 2 :(得分:0)
在部分提交中,icefaces ajax bridge(取代通常的jsf portlet桥)避免了正常的门户操作/呈现请求,直接联系阻塞servlet(以避免使其他请求范围的portlet无效,并且一般,更快)。因此,在正常门户请求中设置的所有参数/属性都不在ajax中设置。它们仅在该页面的初始GET类型请求中设置。所以,实际上你应该做的是将这些参数保存在@PostConstruct或控制bean的其他方法中,然后再重用它们。 (无论如何,他们不会改变部分提交,对吧?)。 但请记住,如果你将IceFaces与Spring(以及他们的EL解析器一起使用,因为这会消除你的扩展请求范围),这将不起作用。
答案 3 :(得分:-1)
如果你在JSF环境中,那么试试这个:
String param = LiferayFacesContext.getInstance().getRequestQueryStringParameter("foo");