【问题标题】:Spring webflow: handling NoSuchFlowDefinitionException with a flowSpring webflow:使用流处理 NoSuchFlowDefinitionException
【发布时间】:2013-05-22 10:58:19
【问题描述】:

我正在尝试为我的 Spring 3.2.0、Spring webflow、JSF 2.1.12 应用程序实现异常处理。

到目前为止,我可以使用异常处理程序流捕获大部分异常:

<persistence-context/>

<decision-state id="handleException" >
    <if test="deviceManager.isMobileDevice()" then="mobileException" else="generalException"/>
</decision-state>

<view-state id="generalException" view="../views/exception/generalException.xhtml">
    <on-entry>
        <evaluate expression="exceptionManager.extractMessages(flowExecutionException, rootCauseException)" result="viewScope.exc"/>
    </on-entry>
</view-state>

<view-state id="mobileException" view="../views/exception/mobileException.xhtml">
    <on-entry>
        <evaluate expression="exceptionManager.extractMessages(flowExecutionException, rootCauseException)" result="viewScope.exc"/>
    </on-entry>
</view-state>

<global-transitions>
    <transition on-exception="java.lang.Exception" to="handleException"/>
</global-transitions>

但这不能处理 NoSuchFlowDefinitionException 和类似情况,如果我理解得很好,它们发生在流程执行之外。

有人知道如何处理这些异常吗?

我还需要将异常映射到流而不是静态视图,例如 error.html。这是因为我的系统需要在后台做一些额外的工作来加载页面信息。

任何帮助将不胜感激,祝你有美好的一天,

马蒂亚

>>>>

我添加了一个 SimpleMappingExceptionResolver 来捕获 NoSuchFlowDefinitionException:

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
          <props>
             <prop key="org.springframework.webflow.definition.registry.NoSuchFlowDefinitionException">
                exceptionFlow
             </prop>
          </props>
       </property>
</bean>

异常被捕获,但解析器将目标流转换为视图,寻找视图:WEB-INF/exceptionFlow.xhtml 此视图不存在,因为我需要使用流 exceptionFlow.xml 处理异常

com.sun.faces.context.FacesFileNotFoundException: /WEB-INF/exceptionView.xhtml Not Found in ExternalContext as a Resource

如何将其重定向到流而不是视图?我尝试添加一个映射到视图上的控制器:

@Controller
@RequestMapping("/WEB-INF/exceptionFlow.xhtml")
public class ExceptionController {

    @RequestMapping(method = RequestMethod.GET)
    public String redirectToPublicFlowGet(ModelMap model) {
        return "spring/flows/public";   
    }

    @RequestMapping(method = RequestMethod.POST)
    public String redirectToPublicFlowPost(ModelMap model) {
        return "spring/flows/public";   
    }
}

但是无论我在请求映射中添加什么(我尝试了“/WEB-INF/exceptionFlow.xhtml”、“/exceptionFlow.xhtml”、“exceptionFlow.xhtml”。“exceptionFlow”代码从不访问方法(我把一些调试断点)。

谁知道我做错了什么?

谢谢,祝你有个美好的一天

【问题讨论】:

    标签: spring spring-webflow


    【解决方案1】:

    你可以通过改变来做到这一点

    <prop key="org.springframework.webflow.definition.registry.NoSuchFlowDefinitionException">
          exceptionFlow
    </prop>
    

          redirect:/exceptionFlow
    

    这将为给定的流创建新的流执行 但是您将丢失有关异常的信息...

    【讨论】:

      猜你喜欢
      • 2014-11-07
      • 1970-01-01
      • 2012-08-24
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 2011-08-13
      相关资源
      最近更新 更多