📜  Spring MVC-隐藏字段示例(1)

📅  最后修改于: 2023-12-03 14:47:33.834000             🧑  作者: Mango

Spring MVC-隐藏字段示例

简介

在使用Spring MVC进行表单提交时,通常会使用隐藏字段(hidden field)来传递一些需要被保留但又不需要展示的值。隐藏字段可以在表单中设置,但不会在页面上显示,只有在提交表单时才会被传递到后台。

本文将介绍如何在Spring MVC中使用隐藏字段。

示例

本示例基于Spring Boot,使用Thymeleaf作为模版引擎。我们将创建一个简单的表单,包含用户名和密码两个字段,同时使用隐藏字段传递一个随机产生的验证码。在后台收到表单提交后,我们将比对验证码是否正确。

首先创建一个Spring Boot应用程序,并添加如下依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

在我们的Controller中,定义一个处理GET请求的方法,返回一个包含表单的视图模版。

@Controller
public class LoginController {
    
    @GetMapping("/login")
    public String showLoginForm(Model model) {
        LoginForm loginForm = new LoginForm();
        model.addAttribute("loginForm", loginForm);
        return "login";
    }
}

在视图模版中,我们使用Thymeleaf模版引擎创建表单。注意到我们使用了一个隐藏字段随机生成验证码。

<html xmlns:th="http://www.thymeleaf.org">
<body>
    <h2>Login Form</h2>
    <form method="POST" th:object="${loginForm}">
        <div>
            <label>Username:</label>
            <input type="text" th:field="*{username}" />
        </div>
        <div>
            <label>Password:</label>
            <input type="password" th:field="*{password}" />
        </div>
        <div>
            <input type="hidden" th:value="${loginForm.code}" th:field="*{code}" />
            <label>Code:</label>
            <input type="text" name="inputCode" />
        </div>
        <div>
            <button type="submit">Login</button>
        </div>
    </form>
</body>
</html>

在我们的LoginForm类中,我们定义了三个字段username、password、code,并提供了getters和setters方法。

我们还定义了一个名为generateCode()的方法,用来随机生成六位数字的验证码。

public class LoginForm {
 
    private String username;
    private String password;
    private String code;
 
    public String getUsername() {
        return username;
    }
 
    public void setUsername(String username) {
        this.username = username;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public String getCode() {
        return code;
    }
 
    public void setCode(String code) {
        this.code = code;
    }
 
    public void generateCode() {
        Random r = new Random();
        this.code = String.format("%06d", r.nextInt(1000000));
    }
 
}

最后是处理表单提交的方法,在这个方法中我们比对提交上来的验证码和我们在LoginForm中生成的验证码是否相等。如果相等,表示表单接受,否则表示验证码错误。

@PostMapping("/login")
public String submitLoginForm(@ModelAttribute("loginForm") LoginForm loginForm,
                           Model model, HttpServletRequest request) {
    String inputCode = request.getParameter("inputCode");
    if (loginForm.getCode().equals(inputCode)) {
        return "success";
    } else {
        model.addAttribute("message", "Incorrect code, please try again!");
        return "login";
    }
}
结语

本文介绍了如何在Spring MVC中使用隐藏字段。我们以一个简单的验证码示例为例,展示了如何添加和获取隐藏字段以及如何在后台使用它们。

完整示例代码可在 Github 上找到。