Note that there are some explanatory texts on larger screens.

plurals
  1. POValidators not supporting for second pojo Address in spring mvc
    text
    copied!<p>Validation is working fine for User class but not for address class</p> <p><em><strong>Registration.java</em></strong></p> <pre><code>package com.semanticbits.controller; import com.semanticbits.pojo.Address; import com.semanticbits.pojo.User; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/register") public class RegistrationController { @RequestMapping(method = RequestMethod.GET) public String showRegistrationForm(ModelMap map){ User user=new User(); user.setAddress(new Address()); map.addAttribute("user", user); return "register"; } //reference data @ModelAttribute("genderList") public List&lt;String&gt; showGenderOnForm(){ List&lt;String&gt; genderList=new ArrayList&lt;&gt;(); genderList.add("Select gender"); genderList.add("Male"); genderList.add("Female"); return genderList; } @RequestMapping(method = RequestMethod.POST) public String processRegistrationForm(@ModelAttribute("user") User user, BindingResult result) { validator.validate(user, result); //validator.validate(user.getAddress(), result); if (result.hasErrors()) { return "register"; } return "welcome"; } } </code></pre> <p><em><strong>Address.java</em></strong></p> <pre><code>package com.semanticbits.pojo; import javax.persistence.Embeddable; import org.springmodules.validation.bean.conf.loader.annotation.handler.NotBlank; import org.springmodules.validation.bean.conf.loader.annotation.handler.Size; @Embeddable public class Address { @NotBlank(message = "Please enter city") private String city; @NotBlank(message = "Please enter state") private String state; @NotBlank(message = "Please enter zip code") @Size(max = 6,min = 6,message = "Zip code should be of 6 digits only") private int zipCode; //setters and getters </code></pre> <p>}</p> <p><strong>User.java</strong></p> <p>/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.semanticbits.pojo;</p> <pre><code>import com.semanticbits.pojo.Address; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import org.springmodules.validation.bean.conf.loader.annotation.handler.Length; import org.springmodules.validation.bean.conf.loader.annotation.handler.Max; import org.springmodules.validation.bean.conf.loader.annotation.handler.Min; import org.springmodules.validation.bean.conf.loader.annotation.handler.NotBlank; @Entity @Table public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int userId; @NotBlank(message = "Please enter username") @Length(min = 6,message ="Please enter minimum six characters" ) private String username; @NotBlank(message = "Please enter password") private String password; @NotBlank(message = "Please enter your first name") private String firstName; @NotBlank(message ="Please enter your last name") private String lastName; @Min(value=18,message = "Age should be greater than 18") @Max(value=100,message="Age should be less than 99") private int age; private String gender; @Embedded private Address address; 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; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } </code></pre> <p>}</p> <p><em><strong>register.jsp</em></strong></p> <pre><code>&lt;%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt; &lt;%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %&gt; &lt;%@page contentType="text/html" pageEncoding="UTF-8"%&gt; &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt; &lt;title&gt;Login here&lt;/title&gt; &lt;link href="css/bootstrap.min.css" rel="stylesheet" media="screen"&gt; &lt;style&gt; .form-error-message{ font-weight: bold; color: red; } .errorblock { color: #000; background-color: #ffEEEE; border: 3px solid #ff0000; padding: 8px; margin: 16px; } &lt;/style&gt; &lt;body&gt; &lt;div class="container"&gt; &lt;div class="modal-form"/&gt; &lt;h1&gt;Registration form&lt;/h1&gt; &lt;form:form commandName="user" action="register.htm" method="POST"&gt; &lt;form:errors path="*" cssClass="errorblock" element="div" /&gt; &lt;table&gt; &lt;tr&gt; &lt;td&gt; Username :&lt;/td&gt; &lt;td&gt;&lt;form:input path="username"/&gt;&lt;/td&gt; &lt;td&gt;&lt;form:errors path="username" cssClass="form-error-message"/&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Password :&lt;/td&gt; &lt;td&gt;&lt;form:input path="password"/&gt;&lt;/td&gt; &lt;td&gt;&lt;form:errors path="password" cssClass="form-error-message"/&gt; &lt;tr&gt; &lt;tr&gt; &lt;td&gt;Confirm Password :&lt;/td&gt; &lt;td&gt;&lt;input type="password" name="confirmPassword"/&gt;&lt;/td&gt; &lt;tr/&gt; &lt;tr&gt; &lt;td&gt;First Name :&lt;/td&gt; &lt;td&gt;&lt;form:input path="firstName"/&gt;&lt;/td&gt; &lt;td&gt;&lt;form:errors path="firstName" cssClass="form-error-message"/&gt;&lt;/td&gt; &lt;tr/&gt; &lt;tr&gt; &lt;td&gt;Last Name :&lt;/td&gt; &lt;td&gt;&lt;form:input path="lastName"/&gt;&lt;/td&gt; &lt;td&gt;&lt;form:errors path="lastName" cssClass="form-error-message"/&gt;&lt;/td&gt; &lt;tr/&gt; &lt;tr&gt; &lt;td&gt;Age :&lt;/td&gt; &lt;td&gt;&lt;form:input path="age"/&gt;&lt;/td&gt; &lt;td&gt;&lt;form:errors path="age" cssClass="form-error-message"/&gt;&lt;/td&gt; &lt;tr/&gt; &lt;tr&gt; &lt;td&gt;Gender :&lt;/td&gt; &lt;td&gt;&lt;form:select items="${genderList}" path="gender"/&gt;&lt;/td&gt; &lt;tr/&gt; &lt;tr&gt; &lt;td&gt;City :&lt;/td&gt; &lt;td&gt;&lt;form:input path="address.city"/&gt;&lt;/td&gt; &lt;td&gt;&lt;form:errors path="address.city" cssClass="form-error-message"/&gt;&lt;/td&gt; &lt;tr/&gt; &lt;tr&gt; &lt;td&gt;State :&lt;/td&gt; &lt;td&gt;&lt;form:input path="address.state"/&gt;&lt;/td&gt; &lt;td&gt;&lt;form:errors path="address.state" cssClass="form-error-message"/&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Zip Code :&lt;/td&gt; &lt;td&gt;&lt;form:input path="address.zipCode"/&gt;&lt;/td&gt; &lt;td&gt;&lt;form:errors path="address.zipCode" cssClass="form-error-message"/&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;input type="checkbox" name="rememberme"/&gt;Remember Me&lt;/td&gt; &lt;td&gt;&lt;input type="submit" class="btn-medium btn btn-info" value="Login"/&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/form:form&gt; &lt;/div&gt; &lt;/div&gt; &lt;script src="js/bootstrap.min.js"&gt;&lt;/script&gt; &lt;/body&gt; &lt;/html&gt; </code></pre>
 

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