私は白髪の原因となるSpringWebFlowアプリを持っています。検証が成功した場合に私が達成しようとしているのは、異なるデータで同じビューを表示することです。これは機能します。ただし、無効なデータが入力された場合は、前のビューを表示したいのですが、誤った値が事前に入力され、上記のエラーを修正する方法をユーザーに通知するエラーメッセージが表示されます。ただし、検証が成功したかどうかに関係なく、アプリは内部の処理を実行しon-render
ます。値が無効であるため、アプリがクラッシュします。on-render
検証が成功した場合にのみ処理を実行するにはどうすればよいですか?
私のビューステート設定は次のようになります。
<view-state id="mine" model="myModel">
<var name="myModel" class="com.examplelMyModel" />
<on-entry>
<set name="foo" value="bar" />
</on-entry>
<on-render>
<set name="requestScope.stuff" value="stuffService.loadStuff( ... )" />
<set name="viewScope.otherStuff" value="otherStuffService.loadOtherStuff( requestScope.stuff, myModel.a, myModel.b )" />
</on-render>
<transition on="reloadMine" validate="true"/>
</view-state>
私のバリデーターは次のようになります。
public class MyModelValidator{
...
public void validateMine(MyModel myModel, ValidationContext context) {
Locale currentLocale = LocaleContextHolder.getLocale();
MessageContext messages = context.getMessageContext();
DateTime a= new DateTime(myModel.getA());
DateTime a = new DateTime(myModel.getB());
DateTime now = new DateTime();
if(a.isAfter(now) || b.isAfter(now)){
messages.addMessage(new MessageBuilder().error().defaultText(messageSource.getMessage("ohno", null, currentLocale)).build());
}
}
}
}