Как я могу заставить WebFlow прервать переход и просто просмотреть предыдущую страницу, если проверка не пройдена? - PullRequest
1 голос
/ 26 октября 2010

У меня есть приложение 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());
        }
    }
}

}

1 Ответ

2 голосов
/ 26 октября 2010

on-render вызывается, когда страница действительно передается обратно пользователю. Чтобы иметь возможность отображать любые ошибки проверки, вам придется повторно визуализировать страницу и вызывать ее. Разве вы не можете поместить эти два набора внутри входного тега?

...