我正在尝试在表单中显示验证错误,但是我无法实现它。 我正在尝试传递空值,我收到了休眠验证消息,但看不到表单验证?
这是我的代码:
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String saveForm(@Valid Users users,Model model,Errors errors) {
if(errors.hasErrors()) {
return "registerPage";
}
else {
model.addAttribute("message","Registered................");
System.out.println("Save Users TEST------------------------------------>");
userRepository.save(users);
return "register-success";
}
}
这里是例外:
“工资”字段上的对象“用户”中的字段错误:拒绝的值 [空值];码 [NotNull.users.salary,NotNull.salary,NotNull.java.lang.Integer,NotNull]; 论点 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码[users.salary,salary];参数[];默认消息[薪水]]; 默认消息[不得为null]对象'users'中的字段错误 字段“ dept”:拒绝值[];码 [Size.users.dept,Size.dept,Size.java.lang.String,Size];论点 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码[users.dept,dept];参数[];默认消息[dept],10,2]; 默认消息[长度应在2到10之间]字段错误 字段“名称”上的对象“用户”:拒绝的值[];码 [Size.users.name,Size.name,Size.java.lang.String,Size];论点 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码[users.name,name];参数[];默认消息[名称],30,2]; 默认消息[长度应在2到30之间]]
这是我的用户Pojo:
public class Users implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private Integer id;
@Column(name="name")
@NotNull
@Size(min=2,max=30,message="Length should be in between 2 to 30")
private String name;
@Column(name="salary")
@NotNull
private Integer salary;
@Column(name="dept")
@NotNull
@Size(min=2,max=10,message="Length should be in between 2 to 10")
private String dept;
....
}
这是我的html表单(使用百里香叶):
<h1 th:text="${message}" align="center"></h1>
<div class="container">
<h2>Registration form</h2>
<form class="form-horizontal" th:object="${registerCommand}" th:action="@{/rest/users/register}" method="post">
<div class="form-group">
<label for="name">Username:</label>
<input type="text"
class="form-control" id="name" placeholder="Enter Name"
name="name" th:field="*{name}"> <br />
<p th:if="${#fields.hasErrors('name')}" th:errors="*{name}" th:field="*{name}"
class="alert alert-danger"></p>
</div>
<div class="form-group">
<label for="dept">Department:</label>
<input type="text"
class="form-control" id="dept" placeholder="Enter Department"
name="dept" th:field="*{dept}"> <br />
<p th:if="${#fields.hasErrors('dept')}" th:errors="*{dept}" th:field="*{dept}"
class="alert alert-danger"></p>
</div>
<div class="form-group">
<label for="salary">Salary:</label> <input type="text"
class="form-control" id="salary" placeholder="Enter salary"
name="salary" th:field="*{salary}"> <br />
<p th:if="${#fields.hasErrors('salary')}" th:errors="*{salary}" th:field="*{salary}"
class="alert alert-danger"></p>
</div>
<button type="submit" class="btn btn-sucess">Submit</button>
</form>
</div>
答案 0 :(得分:1)
发现我的原因,我没有在saveForm控制器中传递正确的参数-
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String saveForm(@ModelAttribute("registerCommand") @Valid Users users, BindingResult bindingResult, Model model){
if(bindingResult.hasErrors()) {
return "registerPage";
}
else {
userRepository.save(users);
return "register-success";
}
}
注意-如果使用的是BindingResult,它应该恰好在Bean之后。
仅顺序有意义的是BindingResult。它必须跟随正在验证的bean,以便Spring知道在哪里放置任何验证错误。
感谢David Lavender的回答 https://stackoverflow.com/a/29075342/6547517
答案 1 :(得分:0)
对象User上的字段'salary'可能为空
答案 2 :(得分:0)
在保存用户对象时检查在用户对象中传递的数据,可能是薪水值将为空。正如您对Users使用@valid一样,输入请求数据中的值不会为null或空值