首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring :用流处理NoSuchFlowDefinitionException

Spring :用流处理NoSuchFlowDefinitionException
EN

Stack Overflow用户
提问于 2013-05-27 14:50:36
回答 1查看 1.3K关注 0票数 0

我试图为我的Spring3.2.0、Spring、JSF2.1.12应用程序实现异常处理。

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

代码语言:javascript
复制
<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:

代码语言:javascript
复制
<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/ExctionFlow.xhtml-此视图不存在,因为我需要处理流exceptionFlow.xml的异常。

代码语言:javascript
复制
com.sun.faces.context.FacesFileNotFoundException: /WEB-INF/exceptionView.xhtml Not Found in ExternalContext as a Resource

我怎么能把它重定向到流而不是视图呢?我尝试添加一个在视图上映射的控制器:

代码语言:javascript
复制
@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/ExctionFlow.xhtml”、"/exceptionFlow.xhtml“、"exceptionFlow.xhtml”。"exceptionFlow“--代码从不访问方法(我放置了一些调试断点)。

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

谢谢,祝你今天愉快

EN

回答 1

Stack Overflow用户

发布于 2013-09-10 12:21:53

你可以通过改变

代码语言:javascript
复制
<prop key="org.springframework.webflow.definition.registry.NoSuchFlowDefinitionException">
      exceptionFlow
</prop>

代码语言:javascript
复制
      redirect:/exceptionFlow

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16775665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档