大家好我每次尝试在春天调用验证器时都会收到以下错误
Servlet.service() for servlet spring threw exception: java.lang.IllegalStateException: Invalid target for Validator
请看看并帮助我解决此错误,之前我使用登录页面的验证,它工作正常,但现在它无法正常工作。
这是我的代码段。
控制器
@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>
答案 0 :(得分:16)
问题实际上是在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);
}