【问题标题】:How can I make WebFlow abort the transitioning and just view the previous page when validation fails?当验证失败时,如何让 WebFlow 中止转换并仅查看上一页?
【发布时间】:2025-12-02 18:05:01
【问题描述】:

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

}

【问题讨论】:

    标签: java validation spring-webflow


    【解决方案1】:

    on-render 在页面实际被流式传输回用户时被调用。为了能够显示任何验证错误,您必须重新渲染页面,然后调用 on-render。可以不把那两个集合放在on-entry标签里面吗?

    【讨论】:

    • 是的!那行得通!我一整天都没有弄清楚(我没有写的应用程序和 webflow 新手),所以这真的很有帮助。非常感谢!
    最近更新 更多