2

Spring Web Flow 2.3を使用していますが、送信された場所に応じて異なる場所に移行する2つのフォームがあるページがあります。これを実現するために、ビューステート用に2つのフォームを内部に保持する1つの複合モデルオブジェクトがあります。私が見ている問題は、トランジションAが発生した場合、フォームAのみを検証したいということです。同様に、フォームBでも、Bトランジションが発生した場合にのみBを検証したいということです。検証するフォームを指定する方法がわかりません。各遷移のcompositeForm全体を検証している状態を表示します。

<view-state model="compositeForm">
    <transition on="formAsubmit" to="formApage" validate="true"/>
    <transition on="formBsubmit" to="formBpage" validate="true"/>
</view-state>

どのトランジションが実行されたかに応じて異なる方法で検証するためにカスタムバリデーターをトリガーする方法を知っている人はいますか?

助けてくれてありがとう。

スティーブ

4

3 に答える 3

3

それぞれのカスタムバリデーターについてはわかりませんが、検証方法の中で、RequestContextHolder.getRequestContext()togetCurrentTransition()またはを使用しgetCurrentEvent()て手動で値と比較できると思いますgetId()

于 2013-01-28T16:48:51.067 に答える
1

私がやったことは、フォームBが送信されたときに手動で検証をトリガーし、検証エラーがあったかどうかをチェックする決定状態に移行することでした。少し醜いですが、それが最善の方法だと思います。

<view-state id="start" model="compositeForm">
    <transition on="formAsubmit" to="pageA" validate="true"/>
    <transition on="formBsubmit" to="isFormBValid" validate="false">
        <evaluate expression="formBValidator.validate(compositeForm.formB, messageContext)"/>
    </transition
</view-state>

<decision-state id="isFormBValid">
    <if test="messageContext.hasErrorMessages()" then="start" else="pageB"/>
</decision-state>
于 2013-02-08T06:37:41.347 に答える
0

これは最善の解決策ではありませんが、少なくとも問題を解決します。これが、vlaidatorでトランジションIDとビューステートIDを取得する方法です。

遷移ID

RequestContextHolder.getRequestContext().getFlowExecutionContext().getActiveSession().getState().getId();

ビューステートID

 RequestContextHolder.getRequestContext().getFlowExecutionContext().getActiveSession().getState().getId();
于 2017-05-27T15:56:43.867 に答える