使用Spring 3验证向导页面


问题内容

我开始研究如何在Spring中为类似向导的表单创建控制器,并遇到了AbstractWizardFormController,我很快注意到它已被弃用。

然后,我进一步研究了一下,发现如何完成与Spring3类似的操作。这个示例虽然没有进行任何形式的验证(例如通过@Valid),所以我想知道如何验证向导的每一步?

每个步骤都有可能拥有自己的后备Form对象,然后@SessionAttributes用于在调用最终提交时(大概在表单的最后一页)用于存储其值?

谢谢你的帮助。

(PS:不需要WebFlow的解决方案将是理想的选择。)


问题答案:

我不知道如何使用@Valid批注将其实现,但是您应该能够利用JSR-303验证来完成此任务。作为一个人为的例子:

public class User {
    @NotNull(message = "First name can't be blank", groups = {Step1.class, FinalStep.class})
    private String firstName;

    @NotNull(message = "Last name can't be blank", groups = {Step1.class, FinalStep.class})
    private String lastName;

    @NotNull(message = "Email can't be blank", groups = {Step1.class, FinalStep.class})
    private String emailAddress;

    @NotNull(message = "Please provide a valid address", groups = {Step2.class, FinalStep.class})
    private Address address;

    // getters/setters...

    public interface Step1 {}
    public interface Step2 {}
    public interface FinalStep {}
}

您可以利用JSR-303通过提供标记界面来表示向导步骤来支持验证组这一事实。

然后,不要依赖@Valid批注,而是将Validator实例注入您的控制器并调用:

validator.validate(user, /*<step interface>.class*/);

在您的processPage方法中(在所链接的问题中引用Controller),然后

validator.validate(user, FinalStep.class);

在您的processFinish通话中。