我是Spring MVC的新手。我正在尝试一个简单的应用程序来验证表单值。我使用Spring BindingResult和JSR303进行字段验证。但由于某些原因,验证错误不会显示在错误标记中。实际上,绑定结果不会返回任何错误。
我的bean如下:
package com.app.ebl.bean.login;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class LoginBean {
@NotNull(message = "User Name field can not be blank")
@Size(max = 10, message = "User Name should not be more than 10 characters")
private String userName;
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;
}
}
我的控制器类如下所示,
package com.app.ebl.controller.login;
import javax.validation.Valid;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.app.ebl.bean.login.LoginBean;
@Controller
public class LoginController {
private static final Log log = LogFactory.getLog(LoginController.class);
@RequestMapping(value="/login", method=RequestMethod.GET)
public String toLogin(Model model)
{
model.addAttribute("login",new LoginBean());
return "login";
}
@RequestMapping(value="/authenticate", method=RequestMethod.POST)
public String authenticate(@ModelAttribute(value = "login") @Valid LoginBean login,
BindingResult bindingResult, Model model)
{
if(bindingResult.hasErrors()) {
return "login";
}
model.addAttribute("userName",login.getUserName());
return "home";
}
}
现在如果我在用户名字段中没有提供任何值,系统不会验证相同的值,并允许我进入下一个视图。
有人可以帮助我。 在此先感谢,
答案 0 :(得分:1)
@Size
注释接受min和max参数。如果未提供min
,则使用默认值:
/**
* @return size the element must be higher or equal to
*/
int min() default 0;
您没有提供任何内容,我的猜测是您的控制器不会将空字符串转换为null。首先,我从@NotBlank
切换到org.hibernate.validator
注释。除了@NotNull
之外,它还删除了尾随空格:
public class LoginBean {
@NotBlank(message = "User Name field can not be blank")
@Size(max = 10, message = "User Name should not be more than 10 characters")
private String userName;
....
此外,在控制器中定义init binder,在StringTrimmerEditor
org.springframework.beans.propertyeditors.StringTrimmerEditor
帮助下将空字符串更改为null
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
答案 1 :(得分:1)
我花了一些时间想出这个,我希望这有助于某人。
我遇到了同样的问题。 bean刚刚没有得到验证。
我所做的是通过“buildpath”菜单创建了一个库,并将hibernate-validator.jar添加到我的库中。我可以使用hibernate注释,但我没有得到任何编译错误,但是当我运行它时,bean从未得到验证。
原因是应用程序需要WEB-INF / lib文件夹中的hibernate-validator.jar,以便它可以使用它进行验证。