我开始研究如何在 Spring 中为类似向导的表单创建 Controller ,并遇到了 AbstractWizardFormController,我很快注意到它已被弃用。
然后我又挖了一点,发现how to accomplish something similar with Spring 3 .这个例子没有做任何类型的验证(例如通过 @Valid
),所以我想知道如何验证向导的每个步骤?
是否有可能每个步骤都有自己的支持 Form 对象,然后使用 @SessionAttributes
在调用最终提交时存储它们的值(大概在表单的最后一页上)?
谢谢你的帮助。
(P.S.:不需要 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 {}
}
您可以通过提供标记接口(interface)来表示您的向导步骤,从而利用 JSR-303 支持验证组这一事实。
然后,不要依赖 @Valid 注释,而是将 Validator 实例注入(inject)到您的 Controller 中并调用:
validator.validate(user, /*<step interface>.class*/);
在您的 processPage 方法中(在您的链接问题中引用 Controller ),然后
validator.validate(user, FinalStep.class);
在您的 processFinish 电话中。
关于spring - 使用 Spring 3 验证向导页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6738122/