我试图将我的请求转发到错误页面时,在生成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);
}
} }
4条答案
按热度按时间flvtvl501#
我不确定,但我的猜测是,你没有设置任何渲染参数时,重定向到您的错误页面。
试试这个,看看它是否有任何帮助(你可以用它来代替dispatcher的行):
我正在使用这种类型的重定向与actionResponse,但它应该与resourceResponse以及工作...
EDIT:resource response不包含setRenderParameter方法,但zou可以尝试使用以下方法:
使用
response.createRenderURL()
创建renderURL。如果使用此URL触发请求,则将导致呈现请求/响应(或可以访问该方法的操作请求)。问题是,您试图在portlet的资源阶段重定向到另一个页面(在此阶段中未调用呈现阶段)。
gfttwv5a2#
我不是100%确定这在resourcePhase中是否有效,但您可以试试
yxyvkwin3#
我也遇到过类似的问题。这个管用
63lcw9qa4#
也许它没有转发,因为响应已经提交了,因为你已经在里面写了一些东西。这可以解释为什么include可以工作而forward不能。
您可以使用catch块中的resourceResponse.isCommitted()检查响应是否已经提交。