我正在尝试使用Spring MVC创建一个简单的登录表单 . 我应该说我是新手 . 我的想法是我试图验证表单(使用实现Validator接口的类),如果出现问题,则打印错误 .
验证方法是:
public void validate(Object target, Errors errors)
{
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", "required.username","Va rugam introduceti un nume de utilizator!");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "parola", "required.parola","Va rugam introduceti o parola!");
User user= (User) target;
System.out.println(" a:"+user.getUsername()+" b:"+user.getParola());
User u=userDAO.findByUsername(user.getUsername());
if(u == null)
{
errors.reject("invalid.username","Nume utilizator incorect!");
//System.out.println("NULL");
}
else if(!u.getParola().equals(user.getParola()))
{
errors.reject("invalid.parola","Parola incorecta!");
}
}
问题出在我的jsp页面上:
<form:form method="POST" commandName="user" >
<form:errors path="*" cssClass="error" />
<table>
<tr>
<td>Username :</td>
<td><form:input path="username" /></td>
<td><form:errors path="username" cssClass="error" /></td>
<td><form:errors path="invalid.username" cssClass="error" /></td>
</tr>
<tr>
<td>Password :</td>
<td><form:password path="parola" /></td>
<td><form:errors path="parola" cssClass="error" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Login"></td>
</tr>
</table>
</form:form>
如果我尝试运行此操作,我会收到错误消息:
org.springframework.beans.NotReadablePropertyException:bean类的无效属性'invalid'[pachet.dbo.User]:Bean属性'invalid'不可读或getter方法无效:getter的返回类型是否与参数匹配二传手的类型?
如果我删除该行:
<td><form:errors path="invalid.username" cssClass="error" /></td>
这条线
<form:errors path="*" cssClass="error" />
显示“invalid.username”错误,所以错误存在..可能路径不对?
1 回答
拒绝有两种选择:
拒绝特定字段(字段错误)
拒绝整个提交(全局错误)
你搞乱了两个:
reject(..)
注册一个全局错误,rejectValue(..)
注册一个字段错误 .<form:error>
的path
属性应该是通过model属性字段的路径 . 你显然没有invalid
模型属性 . 你的是user
解决这个问题的方法是使用:
并有: