Note that there are some explanatory texts on larger screens.

plurals
  1. POWhy is validation not working?
    text
    copied!<p>I am writing Web app in java using Spring Web MVC framework. Somehow validation does not work. Below is depicted the controller class:</p> <pre><code>@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 ======"); } } } } </code></pre> <p>Method 'supports' is invoked what gives true value, though 'validate' method stays idle. What is the problem?</p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;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"&gt; &lt;context:component-scan base-package="forum.web" /&gt; &lt;bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /&gt; &lt;/beans&gt; </code></pre> <p>User.java source file:</p> <pre><code>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; } } </code></pre> <p>Main part of jsp page:</p> <pre><code>&lt;form id="userName" action="userName.htm" method="post" accept="text/plain" accept-charset="UTF-8" enctype="application/x-www-form-urlencoded"&gt; &lt;td&gt; &lt;label for&gt; User Name: &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; &lt;form:errors path="uName"/&gt; &lt;input type="text" name="uName" maxlength="20" size="40" onmouseout="submitUName()" value="${user}"/&gt; &lt;/p&gt; &lt;/p&gt; &lt;/td&gt; &lt;td&gt;*&lt;/td&gt; &lt;/form&gt; &lt;/tr&gt; </code></pre> <p>This is my updated Controller (new version):</p> <pre><code>@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 ======"); } } } } </code></pre> <p>Though for some reasons this line <code>this.validator.validate(user, result);</code> causes NullPointerException. Anyway, 'validate' method is not invoked as above. Best regards</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload