2011-09-20 64 views
2

Portlet是否可以讀取其周圍頁面的請求參數?如何從LIferay/IceFaces/JSF portlet支持bean中獲取url請求參數

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") 

,但我總是爲null的productId

謝謝!

回答

0

你嘗試

ExternalContext.getRequestParameterMap()

+0

FacesContext.getCurrentInstance()getExternalContext()getRequestMap()得到。 (「foo」)爲我返回NULL。 – Negatizmo

+0

對不起,錯字。編輯。 –

+0

如果有幫助,我從partialSubmit =「True」icefaces命令按鈕來做這件事。因此,涉及ajax調用... – Negatizmo

1

在部分提交,ICEfaces的AJAX橋(其取代了通常的JSF的portlet橋)是避免正常門戶動作/呈現請求,直接接觸所述阻擋的servlet(以避免使其他請求範圍的portlet無效並且通常更快)。因此,在普通的門戶請求中設置的所有參數/屬性都不會在ajax中設置。它們僅在該頁面的初始GET類型請求中設置。所以,實際上你應該做的是將這些參數保存在控制bean的@PostConstruct或其他方法中,然後再使用它們。 (無論如何,他們不會改變部分提交,對吧?)。 請記住,如果您將IceFaces與Spring結合使用(以及它們的EL Resolver,因爲這消除了擴展的請求範圍),這將不起作用。

2

下面的代碼將這樣的伎倆:

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); 
0

如果你在JSF環境中那就試試這個:。

String param = LiferayFacesContext.getInstance().getRequestQueryStringParameter("foo");