我正在尝试在生成Excel工作表时发生错误时将我的请求转发到错误页面。以下是示例代码。我不确定为什么在抛出异常时它没有被转发到错误页面,它显示空白页面但是没有进入我的错误页面。
@ResourceMapping("xyz") public void generateExcelExport(ResourceRequest request, ResourceResponse response) { try { //Do all the excel related logic response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setProperty("Content-Disposition", "attachment; filename=\"" + XYZ + "\""); workbook.write(response.getPortletOutputStream()); } catch (Exception e) { response.setProperty("Content-Disposition", "inline" ); response.setContentType("text/html"); PortletRequestDispatcher dispatcher = request.getPortletSession().getPortletContext().getRequestDispatcher("/WEB-INF/views/html/jsp/error.jsp"); try { dispatcher.forward(request, response); } catch (Exception e1) { log.error("Unable to forward the request from the portlet", e1); } } }
答案 0 :(得分:0)
我不确定,但我的猜测是你在重定向到你的错误页面时没有设置任何渲染参数。
尝试这一点,看看它是否有任何帮助(您可以将其放置而不是使用调度程序):
response.setRenderParameter("jspPage", "/WEB-INF/views/html/jsp/error.jsp");
我使用 actionResponse 进行此类重定向,但它也适用于 resourceResponse ......
编辑:资源响应不包含setRenderParameter方法,但是你可以尝试使用以下方法:
使用response.createRenderURL()
创建renderURL。如果使用此URL触发请求,则会生成呈现请求/响应(或可以访问该方法的操作请求)。
问题是,您正尝试在portlet的资源阶段重定向到另一个页面(在此阶段未调用渲染阶段)。
答案 1 :(得分:0)
我不是100%确定这可以在resourcePhase中使用,但你可以尝试
com.liferay.portal.kernel.servlet.SessionErrors.add(request, "your Error message here");
答案 2 :(得分:0)
我有类似的问题。这有效 -
PortletURL renderUrl = resourceResponse.createRenderURL();
renderUrl.setParameter("renderException", ex.toString());
resourceResponse.addProperty("Location", renderUrl.toString());
答案 3 :(得分:0)
可能它没有转发,因为响应已经提交,因为你已经写了一些东西。这可以解释为什么包括作品和前进不包括。
您可以使用catch块中的resourceResponse.isCommitted()检查是否已提交响应。