本指南將指導您完成配置Web應用程序表單以支持驗證的過程。Validating Form Inputhtml
您將構建一個簡單的Spring MVC應用程序,它接受用戶輸入並使用標準驗證註釋檢查輸入。 您還將看到如何在屏幕上顯示錯誤消息,以便用戶能夠從新輸入有效的輸入。前端
大約十五分鐘java
一個比較喜歡的文本編輯器或者IDEgit
JDK 1.8 或者更高版本github
Gradle 4+ or Maven 3.2+web
你也能夠導入Code到你的IDE:spring
Spring Tool Suite (STS)apache
1. 打開STS, New ————> Import Spring Getting Started Contentmvc
2. 輸入va 搜索找到 Validating Form Input
Tips: Build Type: Maven 表示咱們建立的是Maven項目
Code Sets: 爲了更好學習咱們把兩個對勾都打上對勾,這樣能夠生成一個寫好的項目和一個空的項目,方便咱們模仿學習。
3. 建立一個PersonForm對象
該應用程序涉及驗證用戶的姓名和年齡,所以首先您須要建立一個班級以備份表單以建立人員。
src/main/java/hello/PersonForm.java
package hello; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; public class PersonForm { @NotNull @Size(min=2, max=30) private String name; @NotNull @Min(18) private Integer age; public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String toString() { return "Person(Name: " + this.name + ", Age: " + this.age + ")"; } }
PersonForm類有兩個屬性:名稱和年齡。 它被標記爲幾個標準驗證註釋:
除此以外,您還能夠看到名字和年齡的getters / setter以及方便的toString()方法。
4. 建立一個Web controller
如今您已經定義了一個窗體支持對象,如今能夠建立一個簡單的Web控制器了
src/main/java/hello/WebController.java
package hello; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Controller public class WebController implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/results").setViewName("results"); } @GetMapping("/") public String showForm(PersonForm personForm) { return "form"; } @PostMapping("/") public String checkPersonInfo(@Valid PersonForm personForm, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return "form"; } return "redirect:/results"; } }
這個控制器有一個GET和一個POST方法,都映射到/。
showForm方法返回表單模板。 它在其方法簽名中包含一個PersonForm,所以該模板能夠將表單屬性與PersonForm相關聯。
checkPersonFormInfo方法接受兩個參數:
personForm對象用@Valid標記,以收集您即將構建的表單中填寫的屬性。
bindingResult對象,所以您能夠測試並檢索驗證錯誤。
您能夠從綁定到PersonForm對象的表單中檢索全部屬性。 在代碼中,您測試錯誤,若是是,請將用戶發回原始表單模板。 在那種狀況下,顯示全部的錯誤屬性。
若是全部人的屬性都是有效的,那麼它會將瀏覽器重定向到最終結果模板。
5, 構建一個HTML前端
src/main/resources/templates/form.html
<html> <body> <form action="#" th:action="@{/}" th:object="${personForm}" method="post"> <table> <tr> <td>Name:</td> <td><input type="text" th:field="*{name}" /></td> <td th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</td> </tr> <tr> <td>Age:</td> <td><input type="text" th:field="*{age}" /></td> <td th:if="${#fields.hasErrors('age')}" th:errors="*{age}">Age Error</td> </tr> <tr> <td><button type="submit">Submit</button></td> </tr> </table> </form> </body> </html>
該頁面包含一個簡單的表格,每一個字段位於表格的一個單獨的插槽中。 該表格適用於發佈到/。 它被標記爲由您在Web控制器的GET方法中看到的personForm對象備份。 這被稱爲bean-backed form。 在PersonForm bean中有兩個字段,您能夠看到它們標記爲th:field =「{name}」和th:field =「{age}」。 每一個字段旁邊是用於顯示任何驗證錯誤的次要元素。
最後,你有一個提交按鈕。 通常來講,若是用戶輸入的名稱或年齡違反了@Valid約束條件,它將會彈出回到此頁面並顯示錯誤消息。 若是輸入有效的姓名和年齡,用戶將被路由到下一個網頁。
src/main/resources/templates/results.html
<html> <body> Congratulations! You are old enough to sign up for this site. </body> </html>
在這個簡單的例子中,這些網頁沒有任何複雜的CSS或JavaScript。 可是對於任何製做網站,瞭解如何設計網頁風格都頗有價值。
6. 建立一個應用程序類
對於此應用程序,您正在使用Thymeleaf的模板語言。 此應用程序須要比原始HTML更多
src/main/java/hello/Application.java
package hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); } }
要激活Spring MVC,您一般會將@EnableWebMvc添加到Application類。 可是當Spring Boot的@SpringBootApplication檢測到classpath上的spring-webmvc時,它已經添加了這個註釋。 一樣的註釋容許它找到帶註釋的@Controller類及其方法。
Thymeleaf配置也由@SpringBootApplication負責:默認狀況下,模板位於templates /下的類路徑中,並經過從文件名中去除「.html」後綴來解析爲視圖。 根據您須要達到的要求,能夠以各類方式更改和覆蓋Thymeleaf設置,但細節與本指南無關。
7.構建一個可執行的JAR
您可使用Gradle或Maven從命令行運行應用程序。 或者您能夠構建一個包含全部必需的依賴項,類和資源的可執行JAR文件,並運行該文件。 這使得在整個開發生命週期內跨越不一樣環境等,將服務做爲應用程序發佈,版本化和部署變得很是容易。
若是您正在使用Gradle,則可使用./gradlew bootRun運行該應用程序。 或者您可使用./gradlew構建構建JAR文件。 而後你能夠運行JAR文件:
java -jar build/libs/gs-validating-form-input-0.1.0.jar
若是您使用的是Maven,則可使用./mvn spring-boot:run來運行該應用程序。 或者您可使用./mvn clean包構建JAR文件。 而後你能夠運行JAR文件:
java -jar target/gs-validating-form-input-0.1.0.jar
上述過程將建立一個可運行的JAR。 您也能夠選擇構建經典的WAR文件。
他的應用程序應該在幾秒鐘內啓動並運行。
若是你訪問 http://localhost:8080/ ,你應該看到這樣的內容:
若是您輸入A做爲姓名,15歲輸入您的年齡並點擊提交,會發生什麼?
在這裏你能夠看到,由於它違反了PersonForm類中的約束條件,因此你會跳回到「main」頁面。 若是您在輸入框中單擊「無提交」提交,則會獲得不一樣的錯誤。
若是您輸入有效的姓名和年齡,則最終顯示在結果頁面上!
恭喜! 你已經編寫了一個簡單的Web應用程序,內置了一個域對象的驗證。 經過這種方式,您能夠確保數據符合特定條件而且用戶正確輸入。
源碼:點擊查看