使用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通话中。