我想知道在Action Phase抛出异常后尝试点击渲染阶段时是否可以清除请求中的异常。
如果你从DispatchPortlet.class的doRenderService方法(Spring提供的类)中查看这段代码片段:
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);
}
}
您可以在此处看到异常被放入参数映射中,似乎没有任何方法可以清除它。
我想做的是最初捕获Exception(我正在做的事情),显示“错误页面”(我正在做的事情),然后在该错误页面上显示一个允许用户带来的按钮再次点击“渲染阶段”页面,以便他/她可以再次尝试他们的动作。
我试图创建一个过滤器,拦截器,新控制器来清除参数,但似乎ParameterMap是一个UnmodifiableCollection。
有什么想法吗?
答案 0 :(得分:0)
我实际上能够通过在渲染阶段过滤器中执行以下操作来解决这个问题:
session.setAttribute(ACTION_EXCEPTION_SESSION_ATTRIBUTE, null)
答案 1 :(得分:0)
您可以使用org.springframework.web.portlet.DispatcherPortlet
配置setForwardActionException(false)
。这可以防止spring在渲染参数或会话中添加异常细节。