我正在尝试为我的 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”代码从不访问方法(我放了一些调试断点)。
有人知道我在做什么错吗?
谢谢 祝你有美好的一天