我正在尝试从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
答案 0 :(得分:7)
尝试PortalUtil.getHttpServletResponse(portletResponse)
答案 1 :(得分:1)
可能是这个帮助
答案 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();