Я пишу веб-приложение на Java, используя Spring Web MVC Framework.Как-то проверка не работает.Ниже изображен класс контроллера:
@Controller
public class UserNameController
{
@InitBinder()
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new UserNameValidator());
}
//
@RequestMapping(value="userName.htm", method=RequestMethod.POST)
public String doForm(@ModelAttribute("user") @Valid User user, BindingResult result, Model model)
{
System.out.println("------------ "+ user.getuName()+" ---------");
if (result.hasErrors()) {
System.out.print("===== errors ======");
}
model.addAttribute("user",user);
return "registration";
}
public class UserNameValidator implements Validator
{
public boolean supports(Class clazz)
{ System.out.println("========== "+User.class.isAssignableFrom(clazz)+" ===================");
return User.class.isAssignableFrom(clazz);
}
public void validate(Object target, Errors errors)
{
System.out.println("=======================");
User newUser = (User) target;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "uName", "field.required", "Required field");
if(errors.hasFieldErrors("uName"))
{
// if(user.existUser() == true)
// {
//}
System.out.print("===== errors 2 ======");
}
}
}
}
Метод 'support' вызывается, что дает истинное значение, хотя метод 'validate' остается бездействующим.В чем проблема?
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:component-scan base-package="forum.web" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
</beans>
Исходный файл User.java:
public class User
{
private String uName;
public User(){}
public User(String uName)
{ System.out.println("=== Constructor==== " + uName);
this.uName= uName;
}
public String toString()
{System.out.println("=====toString()==== " + uName);
return this.uName;
}
public String getuName()
{
return uName;
}
public void setuName(String uName)
{
this.uName = uName;
}
}
Основная часть страницы jsp:
<form id="userName" action="userName.htm" method="post" accept="text/plain" accept-charset="UTF-8" enctype="application/x-www-form-urlencoded">
<td>
<label for> User Name:
</td>
<td> </td>
<td> </td>
<td>
<form:errors path="uName"/>
<input type="text" name="uName" maxlength="20" size="40" onmouseout="submitUName()" value="${user}"/> </p> </p>
</td>
<td>*</td>
</form>
</tr>
Это мой обновленный контроллерновая версия):
@Controller
public class UserNameController
{
private Validator validator;
public void setValidator(Validator validator)
{
this.validator= validator;
}
@InitBinder("user")
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new UserNameValidator());
System.out.println("A binder for object: =============== " + binder.getObjectName());
}
@RequestMapping(value="userName.htm", method=RequestMethod.POST)
public String userName(@ModelAttribute("user") User user, BindingResult result, Model model)
{
this.validator.validate(user, result);
System.out.println("------------ "+ user.getuName()+" ---------");
if (result.hasErrors()) {
System.out.print("===== errors ======");
}
model.addAttribute("user",user);
return "registration";
}
public class UserNameValidator implements Validator
{
public boolean supports(Class clazz)
{ System.out.println("========== "+User.class.isAssignableFrom(clazz)+" ===================");
return User.class.isAssignableFrom(clazz);
}
public void validate(Object target, Errors errors)
{
System.out.println("=======================");
User newUser = (User) target;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "uName", "field.required", "Required field");
if(errors.hasFieldErrors("uName"))
{
// if(user.existUser() == true)
// {
//}
System.out.print("===== errors 2 ======");
}
}
}
}
Хотя по некоторым причинам эта строка this.validator.validate(user, result);
вызывает исключение NullPointerException.В любом случае, метод 'validate' не вызывается, как указано выше.С наилучшими пожеланиями