2016-08-23 177 views
0

我已经用一种形式包装了两个想要使用的对象。下面是包装类:以弹簧形式验证包装

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 = ".*\\@.*\\..*") 

回答

0

我已经解决了自己这个问题,它的方式更简单,比我预料的那样。

验证的工作原理是简单地在此包装中的用户和客户字段之上添加@Valid注释,以便Spring知道实际验证它们是否“更深”。