【发布时间】:2018-05-19 10:02:35
【问题描述】:
我正在尝试在我的 mvc 应用程序中实现 spring 验证框架。我的登录页面有必填的用户名和密码。我在模型类中将它们定义为非空且非空。如果它们留空,我希望 spring 将错误绑定到 BindingResult 对象。我不确定我在哪里做错了。BindingResult 的 hasError() 方法总是在我的控制器类中返回 false。
下面是我的登录控制器
public class LoginController {
@Autowired
private UserRoleService userRoleService;
@Autowired
private AuthenticationService authenticationService;
@RequestMapping(value = "/login", method=RequestMethod.GET)
public ModelAndView showLoginPage() {
System.out.println("coming into LoginController!!");
ModelAndView mav = new ModelAndView("login");
mav.addObject("userModel", new UserInfo());
return mav;
}
@RequestMapping(value = "/welcome", method=RequestMethod.POST)
public ModelAndView login(@Valid @ModelAttribute("userModel") UserInfo user, BindingResult bindingResult) {
System.out.println("authenticate username and password -- invoke LDAP!!");
System.out.println(user.getUsername() + user.getPassword());
String userId = user.getUsername();
String password = user.getPassword();
if(bindingResult.hasErrors())
{
return new ModelAndView("login");
}
if(authenticationService.athenticate(userId,password)) {
List<String> roles = userRoleService.searchRolesByUserId(userId);
for(String role : roles)
System.out.println("role is: "+role);
ModelAndView mav = new ModelAndView("welcome");
return mav;
}
else {
ModelAndView mav = new ModelAndView("login");
mav.addObject("loginFailed", "User Name or Password is incorrect");
return mav;
}
}
}
下面是我的模型类..
public class UserInfo{
@NotNull
@NotEmpty(message="User name cannot be empty")
private String username;
@NotNull
@NotEmpty(message="Password cannot be empty")
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;
}
}
我的 spring xml 有这些条目...
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix">
<value>/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<mvc:resources mapping="/resources/**" location="/WEB-INF/resources/"/>
<mvc:annotation-driven />
下面是我的登录jsp页面..
<form:form class="form-signin" commandName="userModel" method="POST" action="welcome.do" id="loginform">
<h2 class="form-signin-heading">Welcome to BPAY</h2>
<div style="color: red">${loginFailed}</div>
<label for="inputEmail" class="sr-only">Username</label>
<form:input type="text" path="username" id="usernameId" class="form-control"
placeholder="Username" required autofocus/>
<form:errors path="username" cssClass="error"/>
<label for="inputPassword" class="sr-only">Password</label>
<form:input type="password" id="passwordId" path="password" class="form-control"
placeholder="Password" required/>
<form:errors path="password" cssClass="error"/>
<button class="btn btn-lg btn-primary btn-block" type="submit" value="OK">Login</button>
</form:form>
我的控制器类中的 bindingResult.hasErrors() 方法总是返回 false。你能告诉我,我错过了什么吗?
pom 有如下要求的条目..
<!-- Validation framework -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.3.5.Final</version>
</dependency>
【问题讨论】:
-
如果你没有 javax.validation 验证器实现,那些注解什么都不做。您的类路径中需要
hibernate-validator否则它将无法工作。 -
我需要 pom 条目。请查看编辑。
-
尝试将
<form:form标签中的action="login.do"更改为action="welcome",以调用value="/welcome"的登录控制器。 -
我做了更正指向欢迎,但仍然 hasErrors() 返回 false。
标签: spring jsp spring-mvc