2010-07-18 78 views
2

我試圖從liferay門戶獲取HttpServletResponse。我也在與icefaces合作。從liferay門戶獲得HttpServletResponse

PortletResponse response1 = (PortletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse(); 
     HttpServletResponse response = (HttpServletResponse)response1; 

我得到以下異常:

Caused by: java.lang.ClassCastException: com.liferay.portlet.RenderResponseImpl cannot be cast to javax.servlet.http.HttpServletResponse 

回答

7

嘗試PortalUtil.getHttpServletResponse(portletResponse)

1

FacesContext的會,如果你使用的是門戶橋返回的PortletRequest /響應的對象。

你想用HttpServletResponse做什麼?

如果您正在嘗試生成二進制內容,這隻會在JSR 286 portlet的資源階段工作(否則您無法設置標題)。它永遠不會在JSR 168 portlet中工作。如果您需要在JSR 168 portlet中執行此操作,則需要使用輔助servlet。在任何情況下,如果您嘗試使用需要HttpServletResponse作爲其API的第三方庫,則可以使用PortletRequestDispatcher分派到JSP或Servlet,然後使用您可以在其中使用的HttpServletResponse。

0

嘗試讓本機響應,然後澆鑄:

FilterServletResponseWrapper filterResponse = (FilterServletResponseWrapper) RequestContextHolder.getRequestContext().getExternalContext().getNativeResponse(); 
HttpServletResponse response = (HttpServletResponse)filterResponse.getResponse();