Validation Hibernate验证程序和Spring Webflow的问题

Validation Hibernate验证程序和Spring Webflow的问题,validation,spring-webflow,hibernate-validator,Validation,Spring Webflow,Hibernate Validator,我试图使用SpringWebflow和HibernateValidator注释来验证表单,但我做错了什么 如果我使用Spring验证方式(ValidationContext、MessageContext、validate${state},等等),一切都可以正常工作,但我想使用Hibernate注释,如@Email、@NotEmpty等 我读过很多论坛和Spring文档,但我不知道我做错了什么 此时,这是我的视图状态和下一个操作代码: <var name="user" class="mypr

我试图使用SpringWebflow和HibernateValidator注释来验证表单,但我做错了什么

如果我使用Spring验证方式(ValidationContext、MessageContext、validate${state},等等),一切都可以正常工作,但我想使用Hibernate注释,如@Email、@NotEmpty等

我读过很多论坛和Spring文档,但我不知道我做错了什么

此时,这是我的视图状态和下一个操作代码:

<var name="user" class="myproject.web.pojo.User"/>

<view-state id="startSignup" model="user">
    <binder>
        <binding property="email" />
        <binding property="name" />
        <binding property="lastName" />
        <binding property="password" />
    </binder>
    <on-entry>
        <set name="flowScope.user" value="new info.teaming.web.pojo.User()" />
    </on-entry>
    <transition on="dataEntered" to="lookupUser" />
</view-state>

<action-state id="lookupUser">
    <evaluate expression="signupActions.lookupUser(user)" />
    <transition to="startSignup" on-exception="myproject.web.service.exception.UserAlreadyExistsException" />
    <transition to="saveOrder" />
</action-state>
    (...)
import myproject.web.model.UsrUser;
import myproject.web.model.dao.UsrUserDAO;
import myproject.web.pojo.User;
import myproject.web.service.exception.UserAlreadyExistsException;

import javax.annotation.Resource;
import javax.validation.Valid;

import org.springframework.stereotype.Component;
import org.springframework.webflow.action.MultiAction;
import org.springframework.webflow.execution.Event;

@Component
public class SignupActions extends MultiAction {

@Resource
UsrUserDAO usrUserDAO;

private static final long serialVersionUID = 1L;

public Event lookupUser(@Valid User user) throws UserAlreadyExistsException {
    try {
        usrUserDAO.findByEmail(user.getEmail());
    } catch (javax.persistence.NoResultException e) {
        return success();
    }

    throw new UserAlreadyExistsException();
}

public void saveUser(UsrUser user) {
    return;
}

}
(注意:如您所见,当我使用Spring验证(取消对validate方法的注释)时,表单会成功地进行验证)

最后,这是我的注册代码:

<var name="user" class="myproject.web.pojo.User"/>

<view-state id="startSignup" model="user">
    <binder>
        <binding property="email" />
        <binding property="name" />
        <binding property="lastName" />
        <binding property="password" />
    </binder>
    <on-entry>
        <set name="flowScope.user" value="new info.teaming.web.pojo.User()" />
    </on-entry>
    <transition on="dataEntered" to="lookupUser" />
</view-state>

<action-state id="lookupUser">
    <evaluate expression="signupActions.lookupUser(user)" />
    <transition to="startSignup" on-exception="myproject.web.service.exception.UserAlreadyExistsException" />
    <transition to="saveOrder" />
</action-state>
    (...)
import myproject.web.model.UsrUser;
import myproject.web.model.dao.UsrUserDAO;
import myproject.web.pojo.User;
import myproject.web.service.exception.UserAlreadyExistsException;

import javax.annotation.Resource;
import javax.validation.Valid;

import org.springframework.stereotype.Component;
import org.springframework.webflow.action.MultiAction;
import org.springframework.webflow.execution.Event;

@Component
public class SignupActions extends MultiAction {

@Resource
UsrUserDAO usrUserDAO;

private static final long serialVersionUID = 1L;

public Event lookupUser(@Valid User user) throws UserAlreadyExistsException {
    try {
        usrUserDAO.findByEmail(user.getEmail());
    } catch (javax.persistence.NoResultException e) {
        return success();
    }

    throw new UserAlreadyExistsException();
}

public void saveUser(UsrUser user) {
    return;
}

}
当我使用Hibernate验证时,流到达saveUser方法,而不进行任何验证

我正在使用Spring 3:

  • 弹簧3.0.5.1释放
  • SpringWebFlow 2.2.1.1版本
  • Hibernate验证程序4.0.2.GA
我做错了什么


非常感谢你帮助我!:)

您是否在Spring配置XML文件中定义了验证器

根据Spring Webflow,它的定义如下:

<webflow:flow-registry flow-builder-services="flowBuilderServices" />

<webflow:flow-builder-services id="flowBuilderServices" validator="validator" />

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

您是否在Spring配置XML文件中定义了验证器

根据Spring Webflow,它的定义如下:

<webflow:flow-registry flow-builder-services="flowBuilderServices" />

<webflow:flow-builder-services id="flowBuilderServices" validator="validator" />

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

试试看, 更改:

@Resource
UsrUserDAO usrUserDAO;
作者:

使用MVC管理器

以及:

作为Spring MVC控制器,或者重用此MVC代码(如果您已经在设计它;)

试试看, 更改:

@Resource
UsrUserDAO usrUserDAO;
作者:

使用MVC管理器

以及:


作为Spring MVC控制器,或者重用此MVC代码(如果您已经在设计它;)

@Jordi-抱歉,我没有注意到发布日期:)您可能已经解决了您的问题。@Jordi-抱歉,我没有注意到发布日期:)您可能已经解决了您的问题。