0

我想知道在 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。

有什么想法吗?

4

2 回答 2

0

我实际上能够通过在渲染阶段过滤器中执行以下操作来解决这个问题:

session.setAttribute(ACTION_EXCEPTION_SESSION_ATTRIBUTE, null)
于 2011-12-29T15:39:58.420 回答
0

您可以配置您org.springframework.web.portlet.DispatcherPortletsetForwardActionException(false). 这可以防止 spring 在渲染参数或会话中添加异常详细信息。

于 2013-10-24T09:18:40.200 回答