以弹簧形式验证包装

时间:2016-08-23 09:56:43

标签: spring forms validation jsp spring-form

我已经在一个表单中包装了两个我想要使用的对象。这是包装类:

public class UserCustomer {
    User user;
    Customer customer;
    //Getters and setters
    //Constructors

控制器:

@Controller
public class RegisterController {
    @RequestMapping("/register")
    public String showRegister(Model model){
        model.addAttribute("userCustomer", new UserCustomer(new User(), new Customer()));
        return "register";
    }

    @RequestMapping(value="/doRegister", method = RequestMethod.POST)
    public String doRegister(Model model, @Valid UserCustomer userCustomer, BindingResult bindingResult){
        if(bindingResult.hasErrors()){
            return "register";
        }
        System.out.println(userCustomer.getUser());
        return "registered";
    }
}

形式:

        <h3 class="new-models">For New Customers</h3>
        <div class="register">
            <sf:form method="post" action="${pageContext.request.contextPath}/doRegister" commandName="userCustomer">
                <div class="register-top-grid">
                    <h3>PERSONAL INFORMATION</h3>
                    <div>
                        <span>First Name<label>*</label></span>
                        <sf:errors path="customer.name" cssClass="alert-danger"/>
                        <sf:input name="name" type="text" path="customer.name"/>
                    </div>
                    <div>
                        <span>Last Name<label>*</label></span>
                        <sf:errors path="customer.surname" cssClass="alert-danger"/>
                        <sf:input name="surname" type="text" path="customer.surname"/>
                    </div>
                    <div>
                        <span>Email Address<label>*</label></span>
                        <sf:errors path="user.email" cssClass="alert-danger"/>
                        <sf:input name="email" type="text" path="user.email"/>
                    </div>
                    <div>
                        <span>Username<label>*</label></span>
                        <sf:errors path="user.username" cssClass="alert-danger"/>
                        <sf:input name="username" type="text" path="user.username"/>
                    </div>
                    <div class="clearfix"> </div>
                    <!--a class="news-letter" href="#">
                        <label class="sf:checkbox">
                            <!--sf:input type="checkbox" name="newsletter" path="customer.newsletter" checked=""/><i> </i>Sign Up for Newsletter</label>
                    </a-->
                    <a class="news-letter" href="#"></a>
                </div>
                <div class="register-bottom-grid">
                    <h3>LOGIN INFORMATION</h3>
                    <div>
                        <span>Password<label>*</label></span>
                        <sf:errors path="user.password" cssClass="alert-danger"/>
                        <sf:input name="password" type="password" path="user.password"/>
                    </div>
                    <div>
                        <span>Confirm Password<label>*</label></span>
                        <sf:input type="password" path=""/>
                    </div>
                </div>
                <div class="clearfix"> </div>
                <div class="register-but">
                    <input type="submit" value="register">
                    <div class="clearfix"> </div>
                </div>
            </sf:form>
        </div>

除验证外,一切似乎都运行良好。我真的不知道如何在这个包装器中进行验证。

用户类中电子邮件的验证示例:

@Pattern(regexp = ".*\\@.*\\..*")

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,这比我预期的要简单得多。

验证只需在此包装器中的用户和客户字段上方添加@Valid注释即可,因此spring知道实际验证它们“更深”。