【问题标题】:Invalid target for Validator in spring error?春季错误中验证器的目标无效?
【发布时间】:2014-03-01 10:51:37
【问题描述】:

大家好,每当我尝试在我的 spring 中调用验证器时,我都会收到以下错误

Servlet.service() for servlet spring threw exception: java.lang.IllegalStateException: Invalid target for Validator

请查看并帮助我解决此错误,以前我使用登录页面的验证,它工作正常,但现在无法正常工作。

这是我的代码 sn-p。

控制器

@Controller
public class NewUserRegistration 
{
    @Autowired
    private UserService userService;    

    @Autowired
    private NewUserValidator newUserValidator;

    @InitBinder
    public void initBinder(WebDataBinder binder)
    {
       binder.setValidator(newUserValidator);
    }

    @RequestMapping(value="/newUserAdd", method=RequestMethod.POST)
    public String addUser(@ModelAttribute("user")@Valid User user,BindingResult result, Model model)
    {
          return "NewUser";
    }

}

验证器

@Component
public class NewUserValidator  implements Validator
{
    @Override
    public boolean supports(Class<?> classz) 
    {
        return NewUserRegistration.class.equals(classz);
    }

    @Override
    public void validate(Object obj, Errors error) 
    {
    //Validation login for fields
    }
}

JSP 页面

<form:form action="newUserAdd" method="POST" modelAttribute="user">
        <center>
        <table>
            <tr><td>User Id:</td><td><input name="userId" type="text" /></td><td><font color="red"><c:out value="${userIdError}" /></font> </td></tr>
            <tr><td>Password:</td><td><input name="userPassword" type="password"/></td><td><font color="red"><c:out value="${userPasswordError}" /></font></td></tr>
            <tr><td>Confirm Password:</td><td><input name="userConfirmPassword" type="password"/></td><td><font color="red"><c:out value="${userPasswordError}" /></font></td></tr>
            <tr><td>Name:</td><td><input name="userName" type="text"/></td><td><font color="red"><c:out value="${userPasswordError}" /></font></td></tr>
            <tr><td></td><td><input type="submit" value="Create"/></td></tr>

        </table>
        </center>
    </form:form>

【问题讨论】:

  • 你推荐http://stackoverflow.com/questions/4715860/why-is-my-spring-3-validator-validating-everything-on-the-model
  • 或者这个http://stackoverflow.com/questions/14533488/addiing-multiple-validators-using-initbinder
  • 您的验证器用于NewUserRegistration 类,您尝试验证User 对象。不同的类型,因此不兼容,因此出现错误。
  • @M.Deinum:thanx 先生,你是天才,我发现我的错误,实际上在验证器中我使用的是 NewUserRegistration 对象而不是用户的对象,thanx 指出这个......
  • @hrishikesh:谢谢先生,但我在发布我的问题之前已经阅读了它们,我发现了我的愚蠢错误,无论如何,我非常感谢您花时间阅读并为我的问题提供建议。 :)

标签: spring runtime-error validation databinder


【解决方案1】:

问题实际上是在 Validator 类中,您使用的是 NewUserRegistration 的对象,这是错误的,因为您想验证您的用户对象而不是您的 NewUserRegistration 对象。

@Override
    public boolean supports(Class<?> classz) 
    {
        return NewUserRegistration.class.equals(classz);
    }

应该是

@Override
    public boolean supports(Class<?> classz) 
    {
        return User.class.equals(classz);
    }

【讨论】:

  • requestBody应该使用哪一个?
猜你喜欢
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
相关资源
最近更新 更多