2010-07-18 81 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();