[英]Java Spring: how to validate only specific fields from my entity
我是Spring的新手,但是表单验证存在问题。 在我的用户编辑表单中,我只想验证特定字段,而不验证实体中所有带注释的字段。 例如,如果我的UserEntity具有以下字段:
@Entity
@Table(name = "users")
public class UserEntity {
@Id
@Column(name = "user_id")
@GeneratedValue
public int user_id;
@NotEmpty
@Column(name = "userlogin")
public String userlogin;
@NotEmpty
@Column(name = "userpass")
public String userpass;
@NotEmpty
@Column(name = "name")
public String name;
@Email
@NotEmpty
@Column(name = "email")
public String email;
@NumberFormat(style = Style.NUMBER)
@NotEmpty
@Column(name = "phone")
public String phone;
当我有注册表格时,我需要验证所有字段,并且工作正常。 但是,当我编辑了用户表单时,我只想编辑和验证“姓名”,“电子邮件”和“电话”,而不希望更改“ userlogin”和“ userpass”。 但是编辑表单不会成功通过,因为BindingResult会验证所有字段。 这是我的编辑表单:
<springForm:form action="/mywebapp/user/edit" commandName="user" method="POST">
<table>
<tr>
<td>Name:</td>
<td><springForm:input path="name" value="${user.name}" /></td>
<td><springForm:errors path="name" cssClass="error" /></td>
</tr>
<tr>
<td>E-mail:</td>
<td><springForm:input path="email" value="${user.email }" /></td>
<td><springForm:errors path="email" cssClass="error" /></td>
</tr>
<tr>
<td>Phone:</td>
<td><springForm:input path="phone" value="${user.phone}" /></td>
<td><springForm:errors path="phone" cssClass="error" /></td>
</tr>
<tr>
<td><input type="submit" value="Edit" /></td>
</tr>
</table>
</springForm:form>
这是我的控制器方法:
@RequestMapping(value="user/edit", method=RequestMethod.POST)
public String doUserEdit(@Valid @ModelAttribute("user") UserEntity user, BindingResult result, Principal principal) {
if(result.hasErrors()) {
return "user/edit";
}
UserEntity u = this.userService.getUser(principal.getName());
this.userService.editUser(u.getUser_id(), user);
return "redirect:/user";
}
result.hasError()始终返回true,因为它还会验证'userlogin'和'userpass'。
如何忽略编辑表单中的其他字段并仅验证我想要的字段?
我通常创建一个单独的表单类,仅适用于表单提交处理,并将所有必要的验证放在这里:
public class UserUpdateForm {
@NotEmpty
private String name;
@Email
private String email;
@NotEmpty
@NumberFormat(style = Style.NUMBER)
private String phone;
//Getters and setters here
}
这个想法是您将模型类从表示(表单)类中解开。 唯一的缺点是您必须以某种方式处理表单对象和模型对象之间的转换。 像推土机这样的东西可能会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.