2

我正在尝试从 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

4 回答 4

7

尝试PortalUtil.getHttpServletResponse(portletResponse)

于 2010-07-22T01:49:22.507 回答
1

可能是这样

在 Portlet 中生成 PDF 文件

于 2010-07-18T13:55:22.910 回答
1

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

你想用 HttpServletResponse 做什么?

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

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

于 2010-07-18T14:01:13.923 回答
0

尝试获取本机响应,然后进行转换:

FilterServletResponseWrapper filterResponse = (FilterServletResponseWrapper) RequestContextHolder.getRequestContext().getExternalContext().getNativeResponse();
HttpServletResponse response = (HttpServletResponse)filterResponse.getResponse();
于 2012-03-14T23:42:03.390 回答