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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值