1

パスワードを忘れた場合のプロセスを実装しています。チャレンジフェーズでは、以前に回答した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つの可能な解決策があります。

  1. バリデーターでチャレンジの回答を確認し、そこにメッセージを追加しますが、これは検証で作業を行うのは間違っていると感じます。
  2. messageContextをchallengePassesメソッドに渡し、失敗した場合はそこにメッセージを追加しますが、userManagerは、メッセージを管理するのではなく、単なるサービスのようになり、応答を返すだけのようです。
  3. messageManager.addChallengeFailedMessage(messageContext)のような新しいメソッドを作成します。これは、おそらく最も明確な関心の分離ですが、少しやり過ぎだと感じます。

だから、私が求めているのはmessageContext、フローXMLに直接メッセージを追加するクリーンな方法はありますか?

4

1 に答える 1

1

私も過去にこの正確な質問をしました。「検証」の意味的な意味は何ですか?バリデーターでは何が適切に行われますか?私は最終的に、このタイプの操作をバリデーターの一部にすべきではないと判断しました。私はあなたと同様のケースにオプション3を使用しましたが、少しやり過ぎのように思われることに同意します。オプション2は、メソッド名challengePassesがエラーメッセージを追加することを示していないため、理想的ではありません。また、'challengePassesAddedErrorIfNot`はちょっとばかげています。

于 2012-08-17T20:57:27.260 に答える