从liferay门户获取HttpServletResponse

时间:2010-07-18 09:31:30

标签: jsf liferay icefaces httpresponse

我正在尝试从liferay门户获取HttpServletResponse。我也在使用icefaces。

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

4 个答案:

答案 0 :(得分:7)

尝试PortalUtil.getHttpServletResponse(portletResponse)

答案 1 :(得分:1)

可能是这个帮助

Generate PDF File in Portlet

答案 2 :(得分:1)

如果您正在使用portlet桥接,FacesContext将返回PortletRequest / Response对象。

你想用HttpServletResponse做什么?

如果您尝试生成二进制内容,这只能在JSR 286 portlet的资源阶段工作(否则您无法设置标头)。它永远不会在JSR 168 portlet中工作。如果需要在JSR 168 portlet中执行此操作,则需要使用帮助程序servlet。

在任何情况下,如果您尝试使用需要HttpServletResponse作为其API的第三方库,您可以使用PortletRequestDispatcher分派到JSP或servlet,然后使用您可以使用的HttpServletResponse。 / p>

答案 3 :(得分:0)

尝试获取原生响应,然后将其强制转换:

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