0

我正在尝试为我的 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”代码从不访问方法(我放了一些调试断点)。

有人知道我在做什么错吗?

谢谢 祝你有美好的一天

4

1 回答 1

1

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

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

      redirect:/exceptionFlow

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

于 2013-09-10T12:21:53.963 回答