У меня есть приложение Spring WebFlow, которое вызывает у меня седые волосы. Что я пытаюсь сделать, если проверка прошла успешно, это просто показать одно и то же представление с разными данными. Это работает. Однако, когда вводятся недопустимые данные, я хочу показать предыдущий вид, но с предварительно заполненными ошибочными значениями и сообщениями об ошибках, указывающими моему пользователю, как исправить ошибку выше. Тем не менее, независимо от того, успешно ли прошла проверка, приложение все равно выполняет действия внутри 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());
}
}
}
}