1

我正在实施忘记密码的过程。挑战阶段将询问三个先前回答的问题,如果它们是正确的,它会继续。但是,如果它们不正确,这次我想循环回到挑​​战表单,并显示一条错误消息,指出答案不正确。基本上,我想要这样的东西:

  <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

我过去也有过这个确切的问题。'validation' 的语义是什么?在验证器中什么是合适的?我最终决定这种类型的操作不应该成为验证器的一部分。我已将选项 3 用于与您类似的情况,尽管我同意这似乎有点过火了。选项 2 并不理想,因为方法名称challengePasses并未表明它会添加错误消息,并且“challengePassesAddedErrorIfNot”会有点荒谬。

于 2012-08-17T20:57:27.260 回答