gpt4 book ai didi

java - Spring验证注释不显示错误消息

转载 作者:行者123 更新时间:2023-12-01 12:46:09 26 4
gpt4 key购买 nike

嗨,这是我的第一个问题

我是 SPRING 的新手。目前,我正在使用注释进行 Spring 验证

这是我的 DAO 类

public class User {

@NotBlank(message="Username cannot be blank.")
@Size(min=8, max=15, message="Username must be between 8 and 15 characters long.")
@Pattern(regexp="^\\w{8,}$", message="Username can only consist of numbers, letters and the underscore character.")
private String username;

@NotBlank(message="Password cannot be blank.")
@Pattern(regexp="^\\S+$", message="Password cannot contain spaces.")
@Size(min=8, max=15, message="Password must be between 8 and 15 characters long.")
private String password;

@ValidEmail(message="This does not appear to be a valid address.")
private String email;

INCLUDES GETTER AND SETTERS
}

在我的 Controller 中,我正在使用此代码

@RequestMapping("/newaccount")
public String showNewAccount(Model model) {

model.addAttribute("User", new User());
return "newaccount";
}


@RequestMapping(value="/createaccount", method=RequestMethod.POST)
public String createAccount(@Valid User user, BindingResult result) {

if(result.hasErrors()) {
return "newaccount";
}

user.setAuthority("user");
user.setEnabled(true);

usersService.create(user);

return "accountcreated";
}
}

这是我的 newaccount.jsp

<%-- <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%> --%>
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


<html>
<head>
<link href="${pageContext.request.contextPath}/static/style.css"
rel="stylesheet" type="text/css">

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Create Account</title>

</head>
<body>
<sf:form action="${pageContext.request.contextPath}/createAcoount"
method="post" commandName="User">
<table class="formtable">
<tr>
<td class="label">User Name</td>
<td><sf:input class="control" name="username" path="username"
type="text"></sf:input><br></br>
<sf:errors path="username"></sf:errors></td>
</tr>
<tr>
<td class="label">Email</td>
<td><sf:input class="control" name="email" path="email"
type="text"></sf:input><br></br>
<sf:errors path="email" cssClass="error"></sf:errors></td>
</tr>
<tr>
<td class="label">Password</td>
<td><sf:input class="control" name="password" path="password"
type="text"></sf:input><br></br>
<sf:errors path="password" cssClass="error"></sf:errors></td>
</tr>
<tr>
<td class="label"></td>
<td><input type="submit" value="Submit"></td>
</tr>
</table>

</sf:form>
</body>
</html>

当我尝试创建帐户时,我希望它会根据验证显示错误消息,例如:用户名不能为空。

但是,它抛出异常

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'User' available as request attribute
org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:144)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:168)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:188)
org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:154)

提前致谢

最佳答案

您已在处理程序方法中使用了键“user”

model.addAttribute("user", new User());

但是 JSP 中的“用户”

method="post" commandName="User">

两者应该匹配。您还必须修改

public String createAccount(@Valid User user, BindingResult result) {

public String createAccount(@Valid @ModelAttribute("whatever you chose") User user, BindingResult result) {

因为该方法转发到相同的 View ,但没有显式设置模型属性的名称。默认情况下,它将使用首字母小写的类型名称,即本例中的user

关于java - Spring验证注释不显示错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24684956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com