Попытка использовать пружинный валидатор MVC с отношением родительского дочернего класса. Получение ошибки более подробно ниже - PullRequest
0 голосов
/ 06 марта 2012

Я на самом деле пытаюсь проверить форму с именем user.jsp, в которой «пользователь класса» имеет ссылку на «class inuser» (этот класс имеет только один атрибут атрибута), который является другим классом.Когда я оставляю поле квалификации "" пустым, система выдает трассировку стека, которую я вставил ниже.Пожалуйста, помогите, если возможно, я буду благодарен.

package net.roseindia.web;

public class User {

   public User(){
      iu=new inuser();
   }


private String name;    
private String emailid;
private String dob;
private String address;
private inuser iu;
private String contact;


public String getDob() {
    return dob;
}
public void setDob(String dob) {
    this.dob = dob;
}

public String getContact() {
    return contact;
}

public void setContact(String contact) {
    this.contact = contact;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;

}
public String getEmailid() {
    return emailid;
}

public void setEmailid(String emailid) {
    this.emailid = emailid;
}
public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}
    public void setIu(inuser iu) {
         this.iu = iu;
    }
    public inuser getIu() {
         return iu;
    }
}

, тогда мой класс inuser:

 public class inuser {
 public inuser() {} 
 private String qualification;

 public void setQualification(String qualification) {
this.qualification = qualification;
 }

public String getQualification() {
return qualification;
}
}

, так как моя форма частично:

 <tr>
 <td>Qualification:</td>
 <td><form:input path="iu.qualification"/></td>
 <td><font color="red"><form:errors path="iu.qualification"/></font></td>
 </tr>

проверкакласс:

import java.util.regex.*;

import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import net.roseindia.web.User;

public class UserValidator implements Validator {

@Override
public boolean supports(Class clazz) {
    return User.class.isAssignableFrom(clazz);
}
public void validate(Object obj, Errors errors) {
    User user = (User) obj;     

    if ((user.getEmailid() != "") || (user.getEmailid().length()) != 0)       

    {           
        Pattern p=Pattern.compile(".+@.+\\.[a-z]+");
        Matcher m=p.matcher(user.getEmailid());
        boolean b=m.matches();
        if(b!=true)
        {
   errors.rejectValue("emailid", "error.is.not.valid", "Email ID does not   
   Valid");         
        }
    }

    if ((user.getContact() != "") || (user.getContact().length()) != 0) 

   {            
            Pattern pattern = Pattern.compile("\\d{1}-\\d{4}-\\d{6}");
            Matcher matcher = pattern.matcher(user.getContact());
            boolean con=matcher.matches();
            if(con!=true)
                {
                    errors.rejectValue("contact",   
     "error.is.not.valid", "Enter Contact Number Like 0-9999-999999");
                }
    }
    if ((user.getDob() != "") || (user.getDob().length()) != 0) {           
        Pattern pattern = Pattern.compile("\\d{2}/\\d{2}/\\d{4}");
        Matcher matcher = pattern.matcher(user.getDob());
        boolean DOB=matcher.matches();
        if(DOB!=true)
            {
                errors.rejectValue("dob", "error.is.not.valid", 
   "Enter Date of birth Like 01/02/1986 ");
            }
    }
    if (user.getName() == null || user.getName().length() == 0) {
        errors.rejectValue("name", "error.empty.field", "Please Enter Name");
    }        
    if (user.getDob() == null || user.getDob().length() == 0) {
        errors.rejectValue("dob", "error.empty.field", "Please Enter Date Of Birth");
    }        
    if (user.getContact() == null || user.getContact().length() == 0) {
        errors.rejectValue("contact", "error.empty.field", "Please Enter Contact 
    Number");
    }        
    if (user.getEmailid() == null || user.getEmailid().length() == 0) {
        errors.rejectValue("emailid", "error.empty.field", "Please Enter Email ID");
    }
    //====>>>here===>>      if (user.getIu().getQualification()=="" ) {
        errors.rejectValue("qualification", "error.empty.field", "Please Enter   
    Qualification");
    }
    if (user.getAddress() == null || user.getAddress().length() == 0) {
        errors.rejectValue("address", "error.empty.field", "Please Enter Address");
    }
    }
    }

myu statck trace, когда я оставляю поле квалификации пустым (то есть) поле из класса inuser

        org.springframework.web.util.NestedServletException: Request processing failed; 
        nested exception is org.springframework.beans.NotReadablePropertyException:    
        Invalid property 'qualification' of bean class [net.roseindia.web.User]: Bean  
        property 'qualification' is not readable or has an invalid getter method: Does 
        the  return type of the getter match the parameter type of the setter?

    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:583)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

org.springframework.beans.NotReadablePropertyException: Invalid property 'qualification' of bean class [net.roseindia.web.User]: Bean property 'qualification' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
    org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:540)
    org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:532)
    org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue(AbstractPropertyBindingResult.java:79)
    org.springframework.validation.AbstractBindingResult.rejectValue(AbstractBindingResult.java:102)
    org.springframework.validation.AbstractErrors.rejectValue(AbstractErrors.java:122)
    org.springframework.validation.BindException.rejectValue(BindException.java:126)
    net.roseindia.web.UserValidator.validate(UserValidator.java:59)
    org.springframework.validation.ValidationUtils.invokeValidator(ValidationUtils.java:63)
    org.springframework.web.servlet.mvc.BaseCommandController.bindAndValidate(BaseCommandController.java:395)
    org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:263)
    org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Ответы [ 2 ]

0 голосов
/ 06 марта 2012

я думаю, что вы использовали как errors.rejectValue («Квалификация», «Ошибка.empty.field», «Пожалуйста, введите
Квалификация ");

То, что пружина пытается сопоставить, - это «квалификация» в объекте «Пользователь», но ничего подобного нет, поскольку квалификация находится в объекте «inuser». Также ваше отображение формы похоже на

вам нужно отклонить значение типа "iu.qualification". Попробуйте сделать это.

0 голосов
/ 06 марта 2012

Вместо

if (user.getIu().getQualification()=="" )

try

if (user.getIu().getQualification() == null || user.getIu().getQualification().isEmpty())

...