在上一节中,我们已经讲了,在客户端我们需要对用户输入的信息进行校验。那么这个功能应该怎样去实现呢?在这一节中我们将会讲解。
我们希望用户输入一些无效的或空的信息,这就是为什么我们需要对ProfileForm类作相应的修改。修改如下。
public class ProfileForm { @Size(min = 2) private String twitterHandle; @Email @NotEmpty private String email; @NotNull private Date birthDate; @NotEmpty private List<String> tastes = new ArrayList<>(); }
在这里我们作了些有效的强制限制。这些注解都是来自JSR-303的规格。这个规格是贯彻于hibernate-validator的,也包括Spring Boot.
在ProfileController中,我要添加下面的修改。
@RequestMapping(value="/profile", params = {"save"}, method = RequestMethod.POST) public String saveProfile(@Valid ProfileForm profileForm, BindingResult bindingResult) { //提交信息的错误 if (bindingResult.hasErrors()) { return "profile/profilePage"; } System.out.println("save ok" + profileForm); return "redirect:/profile"; }
为了将控制层报同的错误可以友好地在视图层里显示,我们需要修改profilePage.html的页面。修改后的代码如下。
<!DOCTYPE html> <html xmlns:th=http://www.thymeleaf.org xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorator="layout/default"> <head lang="en"> <title>Your Profile</title> </head> <body> <div class="row" layout:fragment="content"> <h2 class="indigo-text center">Personal info</h2> <form th:action="@{/profile}" th:object="${profileForm}" method="post" class="col m8 s12 offset-m2"> <div class="row"> <div class="input-field col s6"> <input th:field="${profileForm.twitterHandle}" id="twitterHandle" type="text" th:errorclass="invalid"/> <label for="twitterHandle">Twitter handle</label> <div th:errors="*{twitterHandle}" class="redtext">Error</div> </div> <div class="input-field col s6"> <input th:field="${profileForm.email}" id="email" type="text" th:errorclass="invalid"/> <label for="email">Email</label> <div th:errors="*{email}" class="red-text">Error</div> </div> </div> <div class="row"> <div class="input-field col s6"> <input th:field="${profileForm.birthDate}" id="birthDate" type="text" th:errorclass="invalid" th:placeholder="${ dateFormat}"/> <label for="birthDate">Birth Date</label> <div th:errors="*{birthDate}" class="red-text">Error</ div> </div> </div> <div class="row s12"> <button class="btn indigo waves-effect waves-light" type="submit" name="save">Submit <i class="mdi-content-send right"></i> </button> </div> </form> </div> </body> </html>
最后,你将会看到的错误提示信息如下。
源码路径:[email protected]:owenwilliam/masterSpringMVC_3.git