使用 spring MVC 进行 Thymeleaf 表单验证
Thymeleaf form validation with spring MVC
这个问题已经被问过几次了,但都没有回答我的问题。两天来,我一直在尝试让不同的功能与 Thymeleaf 一起工作,但非常不成功。我只能让它与 spring-boot 一起工作,但是现在我正在使用 spring-MVC。
首先我会告诉你我的依赖关系
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html xmlns:th="http://www.thymeleaf.org" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Create a New Account</title>
<link th:href="@{/resources/css/loginForm.css}" href="/resources/css/loginForm.css" rel="stylesheet"
type="text/css"/>
</head>
<body>
<form action="#" th:action="@{/createNewAccount}" th:object="${user}" method="post">
<table>
<tr>
<td>Name:</td>
<td><input type="text" th:field="*{username}" /></td>
<td th:if="${#fields.hasErrors('name')}" th:errors="*{username}">Name Error</td>
</tr>
<tr>
<td>Password:</td>
<td><input type="text" th:field="*{password}" /></td>
<td th:if="${#fields.hasErrors('age')}" th:errors="*{password}">Password Error</td>
</tr>
<tr>
<td><button type="submit">Submit</button></td>
</tr>
</table>
</form>
</body>
</html>
现在您可以看到我的 intellij IDE 显示的错误:
User.java
package com.practice.domain;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
* Created by DrewJocham on 8/30/15.
*/
public class User {
@NotNull
@Size(min = 2, max = 30)
private String username;
@NotNull
private String password;
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;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
您调用 hasErrors
的字段名称需要与对象中的字段名称相匹配。像这样:
<td th:if="${#fields.hasErrors('username')}" th:errors="*{username}">Name Error</td>
注意 hasErrors('name')
变成了 hasErrors('username')
,并且:
<td th:if="${#fields.hasErrors('password')}" th:errors="*{password}">Password Error</td>
注意 hasErrors('age')
变成了 hasErrors('password')
。
至于 Intellij 中突出显示的错误,我认为它们具有误导性,并且与这个未解决的问题有关:https://youtrack.jetbrains.com/issue/IDEA-132738
这个问题已经被问过几次了,但都没有回答我的问题。两天来,我一直在尝试让不同的功能与 Thymeleaf 一起工作,但非常不成功。我只能让它与 spring-boot 一起工作,但是现在我正在使用 spring-MVC。
首先我会告诉你我的依赖关系
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html xmlns:th="http://www.thymeleaf.org" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Create a New Account</title>
<link th:href="@{/resources/css/loginForm.css}" href="/resources/css/loginForm.css" rel="stylesheet"
type="text/css"/>
</head>
<body>
<form action="#" th:action="@{/createNewAccount}" th:object="${user}" method="post">
<table>
<tr>
<td>Name:</td>
<td><input type="text" th:field="*{username}" /></td>
<td th:if="${#fields.hasErrors('name')}" th:errors="*{username}">Name Error</td>
</tr>
<tr>
<td>Password:</td>
<td><input type="text" th:field="*{password}" /></td>
<td th:if="${#fields.hasErrors('age')}" th:errors="*{password}">Password Error</td>
</tr>
<tr>
<td><button type="submit">Submit</button></td>
</tr>
</table>
</form>
</body>
</html>
现在您可以看到我的 intellij IDE 显示的错误:
User.java
package com.practice.domain;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
* Created by DrewJocham on 8/30/15.
*/
public class User {
@NotNull
@Size(min = 2, max = 30)
private String username;
@NotNull
private String password;
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;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
您调用 hasErrors
的字段名称需要与对象中的字段名称相匹配。像这样:
<td th:if="${#fields.hasErrors('username')}" th:errors="*{username}">Name Error</td>
注意 hasErrors('name')
变成了 hasErrors('username')
,并且:
<td th:if="${#fields.hasErrors('password')}" th:errors="*{password}">Password Error</td>
注意 hasErrors('age')
变成了 hasErrors('password')
。
至于 Intellij 中突出显示的错误,我认为它们具有误导性,并且与这个未解决的问题有关:https://youtrack.jetbrains.com/issue/IDEA-132738