spring 错误中验证器的目标无效?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/21569939/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 06:32:42  来源:igfitidea点击:

Invalid target for Validator in spring error?

springruntime-errorvalidationdatabinder

提问by Pulkit

Hi all I am getting the following error whenever I am trying to invoke validator in my spring

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

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

Please have a look and help me out in this error, previously I user the validation for login page and it is working fine but now its not working.

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

Here is my code snippet .

这是我的代码片段。

Controller

控制器

@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";
    }

}

}

Validator

验证器

@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 Page

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>

回答by Pulkit

The problem is actually in Validator class you are using NewUserRegistration's object which is wrong because you want to validate your User's object not your NewUserRegistration's object.

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

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

which should be

这应该是

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