我想知道在 Action Phase 抛出异常后尝试命中 Render Phase 时是否可以从请求中清除异常。
如果您从 DispatchPortlet.class(Spring 提供的类)的 doRenderService 方法中查看此代码片段:
PortletSession session = request.getPortletSession(false);
if (session != null) {
if (request.getParameter(ACTION_EXCEPTION_RENDER_PARAMETER) != null) {
Exception ex = (Exception)
session.getAttribute(ACTION_EXCEPTION_SESSION_ATTRIBUTE);
if (ex != null) {
logger.debug("Render phase found exception caught during action phase - rethrowing it");
throw ex;
}
}
else {
session.removeAttribute(ACTION_EXCEPTION_SESSION_ATTRIBUTE);
}
}
您可以在此处看到异常被放入参数映射中,并且似乎没有任何方法可以清除它。
我想做的最初是捕获异常(我正在成功地做的事情),显示一个“错误页面”(我正在成功地做的事情),然后在该错误页面上显示一个按钮,允许用户调出“再次渲染阶段”页面,以便他/她可以再次尝试他们的操作。
我尝试创建过滤器、拦截器、新控制器来清除参数,但似乎 ParameterMap 是 UnmodifiableCollection。
有什么想法吗?