当前位置: 首页 > 知识库问答 >
问题:

spring错误中Validator的目标无效?

仲孙超
2023-03-14

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

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>

共有1个答案

缑文栋
2023-03-14

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

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

这应该是

@Override
    public boolean supports(Class<?> classz) 
    {
        return User.class.equals(classz);
    }
 类似资料:
  • 当我试图运行一个测试时,我得到以下错误: org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为java.lang.IllegalStateException:验证器[userCreateFormValidator bean]的目标无效:com.ar.empresa.forms.UserCreateForm@15C3585

  • 我为Money类编写了一个自定义Hibernate验证约束: 它工作正常,除了错误信息。我看到了非常奇怪的行为:找到了资源包,消息按名称解析,但它被包裹在特殊的字符中,如果消息不能按名称解析,通常会出现这些字符: 此处

  • 问题内容: 我尝试用码头运行一个非常简单的RESTful apache- camel项目。我遵循了http://camel.apache.org/restlet.html中的说明。 我的应用程序将运行,但是我无法查看我的项目,因为每个功能都会从码头收到错误503。在Eclipse中,我可以在java.util.zip.Zipexecution中看到一些错误。(在下面发布),但是我没有使用该lib,

  • 当我插入命令git push heroku master以便在eroku中部署时,会出现以下错误 下面是我的pom.xml 我找过类似的问题,但没有解决我的问题,我甚至在我的属性中添加了: 我正在按照本教程https://dashboard.heroku.com/apps/candidate-manager-api/deploy/heroku-git的步骤进行操作 我该怎么解决这个?

  • 问题内容: 我正在尝试构建使用Java 8构建的应用程序,现在已升级到Java11。我在 Windows计算机中 使用oracle文章安装了Java 11 ,并使用 IntelliJ IDEA 2017 作为IDE。 我更改了系统环境变量并设置了 并将其添加到变量中。 当我在IntelliJ中构建应用程序时,这是我得到的: 到目前为止,这是我尝试过的: 我将目标值从8 更改为11,但这无济于事。同

  • 我正在尝试构建一个使用Java8构建的应用程序,现在它已经升级到Java11了。我在windows机器中使用oracle文章安装了Java11,并且使用IntelliJ IDEA 2017作为我的IDE。 我更改了系统环境变量,并将 当我在IntelliJ中构建应用程序时,我得到的是: 这是我目前所尝试的: > 我将目标值从8更改为11,但这没有帮助。另外,在中验证了并且我的所有模块都设置为11。