乐趣区

关于spring:Spring认证中国教育管理中心了解如何使用-Spring-执行表单验证

原题目:Spring 认证中国教育管理中心 - 理解如何应用 Spring 执行表单验证(Spring 中国教育管理中心)

Spring 认证指南:理解如何应用 Spring 执行表单验证
本指南将疏导您实现配置 Web 应用程序表单以反对验证的过程。

你将建造什么
您将构建一个简略的 Spring MVC 应用程序,该应用程序承受用户输出并应用规范验证正文查看输出。您还将看到如何在屏幕上显示谬误音讯,以便用户能够从新输出输出以使其无效。

你须要什么
约 15 分钟
最喜爱的文本编辑器或 IDE
JDK 1.8 或更高版本
Gradle 4+ 或 Maven 3.2+
您还能够将代码间接导入 IDE:弹簧工具套件 (STS)IntelliJ IDEA
如何实现本指南
像大多数 Spring 入门指南一样,您能够从头开始并实现每个步骤,也能够绕过您曾经相熟的根本设置步骤。无论哪种形式,您最终都会失去工作代码。

要从头开始,请持续从 Spring Initializr 开始。

要跳过基础知识,请执行以下操作:

下载并解压本指南的源代码库,或应用 Git 克隆它:git clone https://github.com/spring-gui…
光盘进入 gs-validating-form-input/initial
跳转到创立 PersonForm 对象。
实现后,您能够对照中的代码查看后果
gs-validating-form-input/complete。

从 Spring Initializr 开始
您能够应用这个事后初始化的我的项目并单击 Generate 下载 ZIP 文件。此我的项目配置为适宜本教程中的示例。

手动初始化我的项目:

导航到 https://start.spring.io。该服务提取应用程序所需的所有依赖项,并为您实现大部分设置。
抉择 Gradle 或 Maven 以及您要应用的语言。本指南假设您抉择了 Java。
单击 Dependencies 并抉择 Spring Web、Thymeleaf 和 Validation。
单击生成。
下载生成的 ZIP 文件,该文件是依据您的抉择配置的 Web 应用程序的存档。
如果您的 IDE 具备 Spring Initializr 集成,您能够从您的 IDE 实现此过程。

你也能够从 Github 上 fork 我的项目并在你的 IDE 或其余编辑器中关上它。

创立 PersonForm 对象
该应用程序波及验证用户的姓名和年龄,因而您首先须要创立一个反对用于创立人员的表单的类。以下清单(来自
src/main/java/com/example/validatingforminput/PersonForm.java)显示了如何执行此操作:

package com.example.validatingforminput;

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:不容许空值,这是 Spring MVC 在条目为空时生成的值。
@Min(18): 不容许年龄低于 18 岁。
除此之外,您还能够查看 and 的 getter 和 settername 以及 age 一个不便的 toString()办法。

创立 Web 控制器
当初您曾经定义了表单反对对象,是时候创立一个简略的 Web 控制器了。以下清单(来自
src/main/java/com/example/validatingforminput/WebController.java)显示了如何执行此操作:

package com.example.validatingforminput;

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 模板。它在其办法签名中蕴含 a PersonForm,以便模板能够将表单属性与 PersonForm.

该 checkPersonInfo 办法承受两个参数:

一个 personForm 用 标记的对象,@Valid 用于收集表单中填写的属性。
一个 bindingResult 对象,以便您能够测试和检索验证谬误。
您能够从绑定到 PersonForm 对象的表单中检索所有属性。在代码中,您测试谬误。如果遇到谬误,能够将用户发送回原始 form 模板。在这种状况下,将显示所有谬误属性。

如果人员的所有属性都无效,则它将浏览器重定向到最终 results 模板。

构建 HTML 前端
当初构建“主”页面,如以下清单(来自
src/main/resources/templates/form.html)所示:

<!DOCTYPE HTML>
<html xmlns:th=”http://www.thymeleaf.org”>

<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 控制器 personForm 的办法中看到的对象标记为正在备份。GET 这被称为“bean-backed form”。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。

运行应用程序
对于此应用程序,您应用的是 Thymeleaf 的模板语言。此应用程序须要的不仅仅是原始 HTML。Spring Initializr 为您创立了一个应用程序类。以下清单(来自
src/main/java/com/example/validatingforminput/ValidatingFormInputApplication.java)显示了该类:

package com.example.validatingforminput;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ValidatingFormInputApplication {

public static void main(String[] args) throws Exception {SpringApplication.run(ValidatingFormInputApplication.class, args);
}

}
要激活 Spring MVC,您通常会增加 @EnableWebMvc 到 Application 类中。然而当 Spring Boot 在你的类门路上 @SpringBootApplication 检测到时,它曾经增加了这个注解 spring-webmvc。同样的注解让它能够找到被注解的 @Controller 类和它的办法。

Thymeleaf 配置也由 @SpringBootApplication. 默认状况下,模板位于类门路下 templates/,并通过从文件名中去除“.html”后缀来解析为视图。(Thymeleaf 设置能够通过多种形式更改和笼罩,具体取决于您须要实现的指标,但详细信息与本指南无关。)

构建一个可执行的 JAR
您能够应用 Gradle 或 Maven 从命令行运行应用程序。您还能够构建一个蕴含所有必要依赖项、类和资源的单个可执行 JAR 文件并运行它。构建可执行 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 指标 /gs-validating-form-input-0.1.0.jar
此处形容的步骤创立了一个可运行的 JAR。您还能够构建经典的 WAR 文件。

应用程序应在几秒钟内启动并运行。

如果您拜访 http://localhost:8080/,您应该会看到相似下图的内容:

Spring 认证指南:理解如何应用 Spring 执行表单验证
以下一对图像显示了如果您输出 N 姓名和 15 年龄并单击提交会产生什么:

Spring 认证指南:理解如何应用 Spring 执行表单验证
Spring 认证指南:理解如何应用 Spring 执行表单验证
后面的图像显示,因为值违反了 PersonForm 类中的束缚,您会被弹回“主”页面。请留神,如果您在输入框中单击提交而没有任何内容,则会收到不同的谬误,如下图所示:

Spring 认证指南:理解如何应用 Spring 执行表单验证
如果您输出无效的姓名和年龄,您最终会进入该 results 页面,如下图所示:

Spring 认证指南:理解如何应用 Spring 执行表单验证
总结
祝贺!您曾经编写了一个简略的 Web 应用程序,并在域对象中内置了验证性能。这样,您能够确保数据合乎特定规范并且用户正确输出数据。

退出移动版