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