パスワードを忘れた場合のプロセスを実装しています。チャレンジフェーズでは、以前に回答した3つの質問を行い、それらが正しければ続行します。ただし、それらが正しくない場合は、回答が正しくないことを示すエラーメッセージを表示して、今回はチャレンジフォームにループバックしたいと思います。基本的に、私はこのようなものが欲しいです:
<view-state id="challengeForm" view="forgotPasswordChallengeView" model="challenge">
<binder>
<!-- http://stackoverflow.com/questions/10338472/debugging-spring-mvc-collection-binding -->
<binding property="questionAndAnswerList[0].answer.answer" />
<binding property="questionAndAnswerList[1].answer.answer" />
<binding property="questionAndAnswerList[2].answer.answer" />
</binder>
<on-entry>
<set name="viewScope.commandName" value="'challenge'" />
</on-entry>
<transition on="submit" bind="true" validate="true" to="checkChallenge" />
</view-state>
<action-state id="checkChallenge">
<evaluate expression="userManager.challengePasses( challange )" />
<transition on="true" to="resetPassword" />
<transition on="false" to="challengeForm">
<!-- ADD MESSAGE HERE -->
<evaluate expression="messageContext.addMessage( ... )" />
</transition>
</action-state>
...
私が今見ているように、私には3つの可能な解決策があります。
- バリデーターでチャレンジの回答を確認し、そこにメッセージを追加しますが、これは検証で作業を行うのは間違っていると感じます。
- messageContextをchallengePassesメソッドに渡し、失敗した場合はそこにメッセージを追加しますが、userManagerは、メッセージを管理するのではなく、単なるサービスのようになり、応答を返すだけのようです。
- messageManager.addChallengeFailedMessage(messageContext)のような新しいメソッドを作成します。これは、おそらく最も明確な関心の分離ですが、少しやり過ぎだと感じます。
だから、私が求めているのはmessageContext
、フローXMLに直接メッセージを追加するクリーンな方法はありますか?