从 liferay 门户获取 HttpServletResponse

Posted

技术标签:

【中文标题】从 liferay 门户获取 HttpServletResponse【英文标题】:get HttpServletResponse from liferay portal 【发布时间】:2011-03-17 13:01:27 【问题描述】:

我正在尝试。我也在使用 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

【问题讨论】:

【参考方案1】:

试试PortalUtil.getHttpServletResponse(portletResponse)

【讨论】:

【参考方案2】:

也许这有帮助

Generate PDF File in Portlet

【讨论】:

【参考方案3】:

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

你想用 HttpServletResponse 做什么?

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

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于从 liferay 门户获取 HttpServletResponse的主要内容,如果未能解决你的问题,请参考以下文章

带有“此网页有重定向循环”的 Liferay 门户

Liferay:如何配置 Liferay 门户

Liferay7 BPM门户开发之29: 核心kernel.util包下面的通用帮助类ParamUtilGetterUtil使用

Liferay7 BPM门户开发之8: Activiti实用问题集合

liferay 门户未打开

Liferay7 BPM门户开发之41: Expando API入门