在flow xml中的messageContext中添加一条消息

时间:2012-08-17 19:57:19

标签: spring jsp spring-webflow

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

  <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. 在Validator中检查质询答案并在那里添加一条消息,但在验证工作中感觉不对。
  2. 将messageContext传递给challengePasses方法,如果失败,请在那里添加消息,但userManager似乎应该更像普通服务,只返回响应而不必管理消息。
  3. 创建一个类似于messageManager.addChallengeFailedMessage(messageContext)的新方法,可能是最关注的问题,但感觉有些过分。
  4. 所以,我要问的是:有没有一种干净的方法可以直接在流XML中向messageContext添加消息?

1 个答案:

答案 0 :(得分:1)

我过去也有过这个问题。 “验证”的语义含义是什么?验证器中的内容是什么?我最终决定这种类型的操作不应该是验证器的一部分。我已经使用选项3来处理类似于你的情况,但我同意这似乎有些过分。选项2并不理想,因为方法名称challengePasses并不表示它会添加错误消息,而'challengePassesAddedErrorIfNot`会有点荒谬。