📅  最后修改于: 2023-12-03 14:47:33.834000             🧑  作者: Mango
在使用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 上找到。