Hibernate Validator和Spring Webflow的问题
|
我正在尝试使用Spring WebFlow和Hibernate Validator Annotations验证表单,但是我做错了事。
如果我使用Spring验证方式(ValidationContext,MessageContext,validate $ {state}等),则一切正常,但是我想使用诸如@ Email,@ NotEmpty等的Hibernate Annotations。
我已经阅读了很多论坛和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>
(...)
这是startSignup.jsp代码:
<!-- sf:form method=\"POST\" modelAttribute=\"user\" -->
<sf:form method=\"POST\" commandName=\"user\" >
<input type=\"hidden\" name=\"_flowExecutionKey\" value=\"${flowExecutionKey}\" />
<fieldset>
<table cellspacing=\"0\">
<tr>
<th>
<label for=\"name\"><fmt:message key=\"signUp.name\"/></label>
</th>
<td>
<sf:input path=\"name\" size=\"25\" id=\"name\" />
</td>
<sf:errors path=\"name\" />
</tr>
<tr>
<th>
<label for=\"lastName\"><fmt:message key=\"signUp.lastName\"/></label>
</th>
<td>
<sf:input path=\"lastName\" size=\"45\" maxlength=\"45\" id=\"lastName\" />
</td>
</tr>
<tr>
<th>
<label for=\"password\"><fmt:message key=\"signUp.password\"/></label>
</th>
<td>
<sf:password path=\"password\" size=\"20\" showPassword=\"true\" id=\"password\" />
</td>
</tr>
<tr>
<th>
<label for=\"email\"><fmt:message key=\"signUp.email\"/></label>
</th>
<td>
<sf:input path=\"email\" size=\"30\" id=\"email\" />
</td>
</tr>
<tr>
<td>
<input type=\"submit\" name=\"_eventId_dataEntered\" value=\"<fmt:message key=\"signUp.register\"/>\"/>
</td>
</tr>
</table>
</fieldset>
</sf:form>
这是myproject.web.pojo.User POJO代码:
import java.io.Serializable;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@NotEmpty
@Length(min = 2, max = 25)
private String name;
@NotEmpty
@Email
private String email;
@NotEmpty
@Length(min = 2, max = 45)
private String lastName;
@NotEmpty
@Length(min = 6, max = 20)
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return lastName;
}
// public void validateStartSignup(ValidationContext context) {
// MessageContext messages = context.getMessageContext();
//
// messages.addMessage(new MessageBuilder().error().source(\"name\").code(\"user.name.notEmpty\").build());
// }
}
(注意:如您所见,当我使用Spring Validation时(取消对validate方法的注释),该表单已成功验证)
最后,这是我的SignupAction代码:
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 Validation时,流程将到达saveUser方法,而无需进行任何验证。
我正在使用Spring 3:
Spring 3.0.5。发布
Spring WebFlow 2.2.1.RELEASE
休眠验证器4.0.2.GA
我做错了什么?
非常感谢您的帮助! :)
没有找到相关结果
已邀请:
2 个回复
好按紊叉
郡晒景沧
通过:
使用MVC管理器。 和:
作为Spring MVC控制器,或者重用此MVC代码(如果已经在使用它的话;)