012驗證表單輸入

原文

https://spring.io/guides/gs/validating-form-input/

直譯

創建一個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班有兩個屬性:name和age。它標有幾個標準驗證註釋:

  • @Size(min=2, max=30) 只允許長度在2到30個字符之間的名稱

  • @NotNull 將不允許null值,如果條目爲空,則爲Spring MVC生成的值

  • @Min(18) 如果年齡小於18歲,則不允許

除此之外,你還可以看到getter / setter方法name和age以及一個方便的toString()方法。

創建Web控制器

現在您已經定義了表單支持對象,現在是時候創建一個簡單的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方法返回form模板。它PersonForm在方法簽名中包含一個,因此模板可以將表單屬性與a關聯PersonForm。

該checkPersonFormInfo方法接受兩個參數:

personForm標記的對象,@Valid用於收集您即將構建的表單中填充的屬性。

一個bindingResult對象,以便您可以測試和檢索驗證錯誤。

您可以從綁定到PersonForm對象的表單中檢索所有屬性。在代碼中,您測試錯誤,如果是,請將用戶發送回原始form模板。在這種情況下,將顯示所有錯誤屬性。

如果所有人的屬性都有效,則它會將瀏覽器重定向到最終results模板。

構建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>

該頁面包含一個簡單的表單,每個字段位於表的單獨插槽中。表格適合發佈/。它被標記爲由personForm您在Web控制器中的GET方法中看到的對象備份。這被稱爲bean支持的形式。有兩個領域的PersonForm豆,你可以看到他們的標籤和。每個字段旁邊都有一個輔助元素,用於顯示任何驗證錯誤。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。但對於任何生產網站,瞭解如何設置網頁樣式是很有價值的。
創建一個Application類
對於此應用程序,您使用的是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檢測到spring-webmvc時,它已經添加了這個註釋。這個相同的註釋允許它找到帶註釋的@Controller類及其方法。

Thymeleaf配置也由以下方式處理@SpringBootApplication:默認情況下,模板位於類路徑下,templates/並通過從文件名中刪除“.html”後綴來解析爲視圖。Thymeleaf設置可以根據您需要的方式以多種方式進行更改和覆蓋,但詳細信息與本指南無關。

構建可執行的JAR

您可以使用Gradle或Maven從命令行運行該應用程序。或者,您可以構建一個包含所有必需依賴項,類和資源的可執行JAR文件,並運行該文件。這使得在整個開發生命週期中,跨不同環境等將服務作爲應用程序發佈,版本和部署變得容易。

如果您使用的是Gradle,則可以使用./gradlew bootRun。或者您可以使用構建JAR文件./gradlew build。然後你可以運行JAR文件:

java -jar build / libs / gs-validating-form-input-0.1.0.jar

如果您使用的是Maven,則可以使用該應用程序運行該應用程序./mvnw spring-boot:run。或者您可以使用構建JAR文件./mvnw clean package。然後你可以運行JAR文件:

java -jar target / gs-validating-form-input-0.1.0.jar

上面的過程將創建一個可運行的JAR。您也可以選擇構建經典WAR文件。
應用程序應該在幾秒鐘內啓動並運行。

如果您訪問http:// localhost:8080 /,您應該看到如下內容:
在這裏插入圖片描述
有效01
如果您爲姓名輸入A,爲您的年齡輸入15並且點擊提交,會發生什麼?
在這裏插入圖片描述
在這裏插入圖片描述
有效02
有效03
在這裏你可以看到,因爲它違反了PersonForm類中的約束,你會被彈回“主頁”。如果單擊“輸入框中沒有任何內容提交”,則會出現其他錯誤。
在這裏插入圖片描述
有效04
如果您輸入有效的姓名和年齡,您最終會進入results頁面!
在這裏插入圖片描述
有效05

摘要

恭喜!您已經編寫了一個簡單的Web應用程序,並在域對象中內置了驗證。這樣,您可以確保數據符合特定條件,並且用戶可以正確輸入數據。

擴展知識

表單驗證

		<dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章