Validation 绑定时如何拒绝bean中的字段进行验证?
我在部门表单中有三个字段作为此模型表单中的模型对象 我已使用注释验证字段。现在,我只想在不同的jsp页面中使用两个字段,即Validation 绑定时如何拒绝bean中的字段进行验证?,validation,spring-mvc,annotations,hibernate-validator,Validation,Spring Mvc,Annotations,Hibernate Validator,我在部门表单中有三个字段作为此模型表单中的模型对象 我已使用注释验证字段。现在,我只想在不同的jsp页面中使用两个字段,即create.jsp,在不同的jsp页面中使用一个字段,即getDepartmentById 当我按下create.jsp的提交按钮时,验证正在进行,但在提供正确的信息后,其未提交的原因在此页面中 我没有给出一个由我的DAO层自动生成的字段部门Id。所以,请帮助我,如何拒绝这个值来执行我的create.jsp页面,以便在数据库中成功创建部门 当我打印BindingResult
create.jsp
,在不同的jsp页面中使用一个字段,即getDepartmentById
当我按下create.jsp的提交按钮时,验证正在进行,但在提供正确的信息后,其未提交的原因在此页面中
我没有给出一个由我的DAO层自动生成的字段部门Id
。所以,请帮助我,如何拒绝这个值来执行我的create.jsp
页面,以便在数据库中成功创建部门
当我打印BindingResult对象时,它显示如下:
Field error in object 'departmentForm' on field 'departmentId': rejected value [null];
codes [NotEmpty.departmentForm.departmentId,NotEmpty.departmentId,NotEmpty.java.lang.String,NotEmpty];
arguments [org.springframework.context.support.DefaultMessageSourceResolvable:
codes [departmentForm.departmentId,departmentId]; arguments [];
default message [departmentId],org.hibernate.validator.constraints.NotEmpty.message},
[Ljava.lang.Class;@4fc4a198,[Ljava.lang.Class;@764d2b11];
default message [may not be empty]`
package com.nousinfo.tutorial.model;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotEmpty;
public class DepartmentForm {
@NotEmpty
@Size(min = 1, max = 20,message="")
private String departmentId;
@NotEmpty
private String departmentName;
private String departmentLocation;
private Character updateStatus;
public String getDepartmentId() {
return departmentId;
}
public void setDepartmentId(String departmentId) {
this.departmentId = departmentId;
}
public String getDepartmentName() {
return departmentName;
}
public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}
public String getDepartmentLocation() {
return departmentLocation;
}
public void setDepartmentLocation(String departmentLocation) {
this.departmentLocation = departmentLocation;
}
public Character getUpdateStatus() {
return updateStatus;
}
public void setUpdateStatus(Character updateStatus) {
this.updateStatus = updateStatus;
}
}
这是我在控制器中编码的方式:
@RequestMapping(value = "/createDepartment", method = RequestMethod.POST)
public String createEmployee(@Valid DepartmentForm departmentForm,
BindingResult bindingResult, Map<String, DepartmentForm> model)
throws Exception {
if (bindingResult.hasErrors()) {
System.out.println(bindingResult);
bindingResult.reject(departmentForm.getDepartmentId());
return "departmentForm";
}
System.out.println("mr ankur jadiy");
model.put("departmentForm", departmentForm);
departmentForm.setUpdateStatus('A');
if (departmentForm.getUpdateStatus() == 'A') {
departmentServiceImpl
.actionDecider(convertDeptFormToDeptBO(departmentForm));
}
return "Success";
}
我的create.jsp
是
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://jakarta.apache.org/taglibs/input-1.0" prefix="input"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Create Department</title>
<link rel="stylesheet" href="css/style.css" type="text/css"></link>
</head>
<body>
<table width="1254" height="74" border="0" align="center">
<tr>
<td width="300" height="68" align="center" bgcolor="#99CCFF"><h2>
<span class="style1">Employee Details </span>
</h2></td>
<td width="100" height="68" align="center" bgcolor="#FFFFFF"><img
src="./image/emps.jpg" width="190" height="92" /></td>
</tr>
</table>
<p>
<br />
</p>
<hr size="1" width="786">
<form:form id="form" method="post" action="/EmployeeWebSpring/departmentController/createDepartment"
modelAttribute="departmentForm">
<table>
<tr>
<form:hidden path="updateStatus" />
</tr>
<tr>
<td>
Department_Name:
<font color="red"><form:errors path="departmentName" /></font>
</td>
</tr>
<tr>
<td><form:input path="departmentName" /></td>
</tr>
<tr>
<td>
Department_Location:
<font color="red"><form:errors path="departmentLocation" /></font>
</td>
</tr>
<tr>
<td><form:input path="departmentLocation" /></td>
</tr>
</table>
<br>
<br />
<p> </p>
<br>
<tr>
<td><input type="submit" name="method" value="save" /></td>
<td><input type="submit" name="method" value="cancel" /></td>
</tr>
<hr size="1" width="786">
<p> </p>
</form:form>
</body>
</html>
创建部门
员工详细信息
部门名称:
部门地址:
错误表明您缺少部门ID的值,这并不奇怪,因为您将其定义为
@NotEmpty
@Size(min = 1, max = 20,message="")
如果部门ID是由您的代码自动生成的,您实际上不需要验证它。您可能应该从部门表单
中删除它,尤其是因为它不在表单中,或者至少让它成为可选的
您可以在业务对象中强制设置,但表单支持对象应该反映表单中的内容
更新
如果departmentId
是数据库生成的id,则应在控制器的InitBinder
中将其设置为不允许:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setDisallowedFields(new String[] { "departmentId" });
}
@Bedwyr Humphreys看了一下这个问题,我遇到了一个很小的问题,但我无法解决这个问题。请帮助我,他们有没有办法不反映或转义绑定对象中的字段值,因为我需要在其他jsp中使用该字段page@henrycharles请参见编辑。基本上你需要禁止这个字段,然后你就不需要验证了。