java – Spring 3验证无效

前端之家收集整理的这篇文章主要介绍了java – Spring 3验证无效前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的应用程序中有一个用户实体,需要验证.
public class User {

private String userName;
private String password;

public void setUserName(String userName){
this.userName = userName;
}

public getUserName(){
return this.userName;
}   

// and so on

}

为此我创建了一个UsersValidator,如下所示.

public class UserValidator implements Validator {

public boolean supports(Class clazz) {
    return User.class.equals(clazz);
}

public void validate(Object obj,Errors errors) {
    ValidationUtils.rejectIfEmptyOrWhitespace(errors,"userName","field.required");
    ValidationUtils.rejectIfEmptyOrWhitespace(errors,"password","field.required");
}
}

我有这样的控制器

@RequestMapping(value = "/login",method = RequestMethod.POST)
public String home(@Valid User user,BindingResult result) {

    if (result.hasErrors()) {
        return "loginForm";
    } else {
    //continue
}

}

绑定结果没有任何错误.

为了验证工作,还需要做些什么?我在控制器或弹簧配置文件中进行了任何更改.

<mvc:annotation-driven />

<context:component-scan base-package="com.myapp" />

<mvc:resources location="/resources/" mapping="/resources/**" />

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass">
        <value>org.springframework.web.servlet.view.tiles2.TilesView</value>
    </property>
</bean>

<bean id="tilesConfigurer"
    class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/tiles.xml</value>
        </list>
    </property>
</bean>

<bean id="messageSource"
    class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>com/dimex/resourceBundles/ApplicationResources</value>
            <value>com/dimex/resourceBundles/errors</value>
        </list>
    </property>            
  </bean>

<mvc:interceptors>  
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="locale"></property>
    </bean>
</mvc:interceptors>

<bean id="localeResolver"
    class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
    <property name="defaultLocale" value="en" />
</bean>

编辑:-

我需要在我的类路径中使用hibernate验证器.我们没有在我们的应用程序中使用hibernate.
请帮忙.

EDIT2: –

当我在实体类中直接使用验证注释(@NotNull,@Size等)时,控制器中的@Valid注释工作,但是如果我从我的实体中删除它们,并尝试使用上面写的验证器,那么@Valid不起作用.

是这样的@Valid注释只能在实体中使用验证注释,而不与验证器一起使用?为了使用我的验证器,我必须直接在我的验证器中调用validate方法

解决方法

从我所理解的,您正在尝试将 JSR-303 @Valid注释与经典弹簧验证相结合.你为什么想做这个? UserValidator类的等效JSR-303注释将如下所示:
@NotNull
@Size(min=1)
private String userName;

@NotNull
@Size(min=1)
private String password

...

弹簧documentation说明了配置JSR-303验证所需的步骤.您需要使用hibernate验证器(或另一个JSR-303提供程序)才能使上述功能正常工作.您还需要如下配置验证器bean.

<bean id="validator"
      class="org.springframework.validation.beanvalidation.LocalValidatorfactorybean"/>

这个问题的其他答案也是一样的.

猜你在找的Java相关文章