Spring BindingResult

  • Post category:Java

以下是关于Spring BindingResult的完整攻略。

Spring BindingResult基本原理

Spring BindingResult是一个接口,用于在Spring MVC中处理表单数据绑定和验证错误。它允许我们在控制器方法中获取表单绑定和验证错误,并将它们传递给视图。Spring BindingResult的步骤如下:

  1. 创建控制器方法
  2. 创建表单对象
  3. 绑定表单数据
  4. 验证表单数据
  5. 处理绑定和验证错误

下面将详细说明每步。

步骤1:创建控制器方法

在使用Spring BindingResult之前,需要先创建控制器方法。可以使用以下示例:

@PostMapping("/submitForm")
public String submitForm(@ModelAttribute("form") Form form, BindingResult bindingResult, Model model) {
    // 处理表单数据绑定和验证错误
    return "result";
}
`

在上面的示例中,我们创建了一个submitForm()方法,并使用@PostMapping注解将其映射到/submitForm路径。在方法参数中,我们使用@ModelAttribute注解将表单对象绑定到form参数上,并使用BindingResult参数处理表单数据绑定和验证错误。最后,我们使用Model参数将结果传递给视图。

### 步骤2:创建表单对象

在创建控制器方法之后,就需要创建表单对象了。可以使用以下示例:

```java
public class Form {
    @NotBlank
    private String name    @Min(18)
    private int age;

    // getters and setters
}

在上面的示例中,我们创建了一个Form类,并使用@NotBlank和@Min注解验证name和age属性。注意,必须提供getter和setter方法。

步骤3:绑定表单数据

在创建表单对象之后,就需要绑定表单数据了。可以使用以下示例:

<form action="/submitForm" method="post">
    <label for="name">Name:</label>
    <input type="text" id="name" name="name" required>

    <label for="age">Age:</label>
    <input type="number" id="age" name="age" required>

    <button type="submit">Submit</button>
</form>

在上面的示例中,我们创建了一个表单,并将其提交到/submitForm路径。注意,表单中的name和age属性必须与Form类中的属性名称相同。

步骤4:验证表单数据

在绑定表单数据之后,就需要验证表单数据了。可以使用以下示例:

@PostMapping("/submitForm")
public String submitForm(@ModelAttribute("form") @Valid Form form, BindingResult bindingResult, Model model) {
    if (bindingResult.hasErrors()) {
        return "form";
    }

    // 处理表单数据绑定和验证错误
    return "result";
}

在上面的示例中,我们在@ModelAttribute注解中使用@Valid注解验证表数据。如果有错误,我们将返回form视图。否则,我们将处理表单数据绑定和验证错误。

步骤5:处理绑定和验证错误

在验证表单数据之后,就需要处理绑定和验证错误了。可以使用以下示:

@PostMapping("/submitForm")
public String submitForm(@ModelAttribute("form") @Valid Form form, BindingResult bindingResult, Model model) {
    if (bindingResult.hasErrors()) {
        return "form";
    }

    // 处理表单数据绑定和验证错误
    model.addAttribute("form", form);
    return "result";
}

在上面的示例中,如果有绑定和验证错误,我们将返回form视图。否则,我们将处理表单数据绑定和验证错误,并将表单对象添加到Model中,以便在视图中使用。

示例

下面是两个使用Spring BindingResult的示例:

示例1:使用Spring BindingResult

在这个示例中,我们将使用Spring BindingResult。

Form.java

public class Form {
    @NotBlank
    private String name;

    @Min(18)
    private int age;

    // getters and setters
}

在上面的示例中,我们创建了一个Form类,并使用@NotBlank和@Min解验证name和age属性。注意,必须提供getter和setter方法。

form.html

<form action="/submitForm" method="post">
    <label for="name">Name:</label>
    <input="text" id="name" name="name" required>

    <label for="age">Age:</label>
    <input type="number" id="age" name="age" required>

    <button type="submit">Submit</button>
</form>

在上面的示例中,我们创建了一个表单,并将其提交到/submitForm路径。注意,表单中的name和age属性必须与Form类中的属性名称相同。

Controller.java

@PostMapping("/submitForm")
public String submitForm(@ModelAttribute("form") @Valid Form form, BindingResult bindingResult, Model model) {
    if (bindingResult.hasErrors()) {
        return "form";
    }

    model.addAttribute("form", form);
    return "result";
}

在上面的示例中,我们创建了一个submitForm()方法,并使用@PostMapping注解将其映射到/submitForm路径。在方法参数中,我们使用@ModelAttribute注解将表单对象绑定到form参数上,并使用BindingResult参数处理表单数据绑定和验证错误。如果有错误,我们将返回form视图。否则,将将表单对象添加到Model中,并返回result视图。

form.jsp

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<form:form modelAttribute="form">
    <form:label path="name">Name:</form:label>
    <form:input path="name"/>

    <form:label path="age">Age:</form:label>
    <form:input path="age"/>

    <button type="submit">Submit</button>
</form:form>

在上面的示例中,我们创建了一个form.jsp视图,并使用Spring表单标签库显示表单数据。注意,我们使用modelAttribute属性将表单对象绑定到form参数上。

示例2:使用Spring BindingResult和Thymeleaf

在这个示例中,我们将使用Spring BindingResult和Thymeleaf。

Form.java

public class Form {
    @NotBlank
    private String name;

   Min(18)
    private int age;

    // getters and setters
}

在上面的示例中,我们创建了一个Form类,并使用@NotBlank和@Min注解验证name和age属性。注意,必须提供getter和setter方法。

form.html

<form action="/submitForm" method="post">
    <label for="name">Name:</label>
    <input type="text" id="name" name="name" required>

    <label for="age">Age:</label>
    <input type="number" id="age" name="age" required>

    <button type="submit">Submit</button>
</form>

在上面的示例中,我们创建了一个表单,并将其提交到/submitForm路径。注意,表单中的name和age属性必须与Form类中的属性名称相同。

Controller.java

@PostMapping("/submitForm")
public String submitForm(@ModelAttribute("form") @Valid Form form, BindingResult bindingResult, Model model) {
    if (bindingResult.hasErrors()) {
        return "form";
    }

    model.addAttribute("form", form);
    return "result";
}

在上面的示例中,我们创建了一个submitForm()方法,并使用@PostMapping注解将其映射到/submitForm路径。在方法参数中,我们使用@ModelAttribute注解将表单对象绑定到form参数上,并使用BindingResult参数处理表单数据绑定和验证错误。如果有错误,我们将返回form视图。否则,我们将将表单对象添加到Model中,并返回result视图。

form.html

“`html<!DOCTYPE html>



Form


< for="age">Age:



“`

在上面的示例中,我们创建了一个form.html视图,并使用Thymeleaf表达式显示表单数据。注意,我们使用thobject属性将表单对象绑定到form参数上,并使用th:field属性将表单字段绑定到表单对象属性上。

总结

以上就关于Spring BindingResult的完整攻略。Spring BindingResult是一个非常有用的接口,可以帮助我们在Spring MVC中处理表单数据绑定和验证错误。