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 などの静的ビューではなく、例外をフローにマップする必要があります。これは、システムがページ情報をロードするためにバックグラウンドで追加の作業を行う必要があるためです。

良い一日をお過ごしください。

マティア

<<<<< 編集 >>>>>

NoSuchFlowDefinitionException をキャッチするために SimpleMappingExceptionResolver を追加しました。

<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 に答える