1

我有一个 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());
        }
    }
}

}

4

1 回答 1

2

当页面实际流回给用户时调用 on-render。为了能够显示任何验证错误,您必须重新渲染页面,然后调用 on-render。你能不把那两个集合放在入口标签内吗?

于 2010-10-26T14:08:56.180 回答