2014-04-06 42 views
0

我正面临Spring表单验证问题。 它适用于@NotNull注释,但有些不适用于@Size。我在下面附上一些代码。提前致谢。Spring 3表单验证正在为@NotNull工作,但不适用于@Size注释

package com.doctor; 
    import javax.validation.constraints.NotNull; 
    import javax.validation.constraints.Size; 

    public class Doctor 
    { 
     @NotNull(message="Cannot be Null") 
     private String uname; 


     @Size(min=1,max=8,message="Min 1 and Max 8") 
     private String password; 
     private String doctor_fname,doctor_lname,address,dept_id,experience,email,phone,resume,image; 

     public String getUname() { 
      return uname; 
     } 


     public void setUname(String uname) { 
      this.uname = uname; 
     } 

     public String getPassword() { 
      return password; 
     } 

     public void setPassword(String password) { 
      this.password = password; 
     } 
.................... 
................... 

DoctorController

package com.doctor; 
import org.springframework.stereotype.Controller; 
import org.springframework.validation.BindingResult; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.ui.Model; 
import javax.validation.Valid; 

@Controller 
public class DoctorController { 


    @RequestMapping(value="/registerDoctor", method=RequestMethod.GET) 
    public String showRegisterForm(Model model) 
    { 
     System.out.println("test"); 
     model.addAttribute(new Doctor()); 
     //return "register1"; 
     return "doctor/edit"; 
    } 
    @RequestMapping(value="/registerDoctor", method=RequestMethod.POST) 
    public String addDoctorformForm(@Valid Doctor doctor,BindingResult bindingresult) 
    { 
     if(bindingresult.hasErrors()) 
     { 
      return "doctor/edit"; 

     } 
     else 
     {    
      return "doctor/added"; 
     } 


    } 
} 

显示页面

<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%> 


    <h2>Create a Doctor account</h2> 
    <sf:form method="POST" modelAttribute="doctor" 
     enctype="multipart/form-data"> 
     <fieldset> 
      <table> 
       <tr> 
        <td><sf:label path="uname">User Name:</sf:label></td> 
        <td><sf:input path="uname" /><br /> <sf:errors 
          path="uname" /> </td> 
       </tr> 

       <tr> 
        <td><sf:label path="password">Password:</sf:label></td> 
        <td><sf:password path="password" showPassword="true" /> 
         <br /> <sf:errors 
          path="password" /></td> 
       </tr> 

       <tr> 
        <td><sf:label path="doctor_fname">First Name:</sf:label></td> 
        <td><sf:input path="doctor_fname" size="15" /><br /> </td> 
       </tr> 
       <tr> 
        <td><sf:label path="doctor_lname">Last Name:</sf:label></td> 
        <td><sf:input path="doctor_lname" size="15" /><br /></td> 
       </tr> 
       <tr> 
        <td><sf:label path="address">Address:</sf:label></td> 
        <td><sf:input path="address" size="15" /><br /></td> 
       </tr> 
       <tr> 
        <td><sf:label path="dept_id">Department:</sf:label></td> 
        <td><sf:input path="dept_id" size="15" /><br /></td> 
       </tr> 
       <tr> 
        <td><sf:label path="experience">Experience:</sf:label></td> 
        <td><sf:input path="experience" size="15" /><br /></td> 
       </tr> 
       <tr> 
        <td><sf:label path="email">Email Address:</sf:label></td> 
        <td><sf:input path="email" size="30" /> <small>In case 
          you forget something</small><br /> </td> 
       </tr> 
       <tr> 
        <td><sf:label path="phone">Phone:</sf:label></td> 
        <td><sf:input path="phone" size="30" /> <small>In case 
          you forget something</small><br /> </td> 
       </tr> 
       <tr> 
        <td><label for="resume">Resume:</label></td> 
        <td><input name="resume" type="file" /> 
       </tr> 
       <tr> 
        <td><label for="image">Profile image:</label></td> 
        <td><input name="image" type="file" /> 
       </tr> 

       <tr> 
        <th></th> 
        <td><input name="commit" type="submit"> 
       </tr> 
      </table> 
     </fieldset> 
    </sf:form> 

Output

我不明白为什么@Size密码不工作。

帮助将不胜感激。

+0

要排除你的问题是不相关的视图中未显示的消息,你有尝试调试bindingresult? – gipinani

+0

做了一个System.out.println(bindingresult.getAllErrors());在控制器内部if(bindingresult.hasErrors())方法...得到这个结果----- [字段'uname'对象'doctor'中的字段错误:被拒绝的值[null];代码[NotNull.doctor.uname,NotNull.uname,NotNull.java.lang.String,NotNull];参数[org.springframework.context.support.DefaultMessageSourceResolvable:codes [doctor.uname,uname];参数[];默认消息[uname]];默认信息[不能为空]] ............................没有提供密码.... –

+0

如果你从那个Doctor对象打印出用户名的长度? –

回答

1

这个问题似乎是你使用多部分形式,但我不认为我看到提及multipartResolver。如果需要这里是如何添加它

<bean id="multipartResolver class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
2

这是因为null@Size的角度来看是有效值。

同时需要注解:

@Size(min=1,max=8,message="Min 1 and Max 8") 
@NotNull 
private String password; 

BTW:您的形式是一个简单的形式,没有文件上传,所以没有必要有`ENCTYPE = “的multipart/form-data的” - 我将删除它

+0

Ralph请参阅包含文件的显示页面