In
this post, I am going to show you how to bind Date type to java model object.
If Date is with the format ‘yyyy/mm/dd’, then spring automatically binds the
request parameter to java Date object.
In
this post, you are going to learn below things.
a.
How
to bind the Date of format ‘yyyy/mm/dd’
b.
How
to bind the Date of different format.
How to bind the Date
of format ‘yyyy/mm/dd’
I
am going to develop a student registration form. Student must provide below
information to register himself.
Information
|
Type
|
userName
|
String
|
age
|
int
|
hobbies
|
Collection
|
dateOfBirth
|
java.util.Date
|
public
class Student {
private String userName;
private int age;
private List<String> hobbies;
private Date dateOfBirth;
.....
.....
}
There
is nothing special about date mapping. Use the @ModelAttribute annotation on
method argument of Student object, spring takes care of data binding for you.
@RequestMapping("/registerMe")
public
ModelAndView getHelloMessage(@ModelAttribute("studentInfo") Student
student, BindingResult bindingResult) {
.....
.....
}
Find
the below working application.
package com.sample.myApp.controllers; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.sample.myApp.model.Student; @Controller public class HelloWorldController { @RequestMapping("/registration") public String getRegistrationpage() { return "registration"; } @RequestMapping("/registerMe") public ModelAndView getHelloMessage(@ModelAttribute("studentInfo") Student student, BindingResult bindingResult) { if (bindingResult.hasErrors()) { ModelAndView modelAndView = new ModelAndView("registration"); return modelAndView; } ModelAndView modelAndView = new ModelAndView("welcome"); modelAndView.addObject("message", "Dear User, your details are registered"); return modelAndView; } }
Student.java
package com.sample.myApp.model; import java.util.Date; import java.util.List; public class Student { private String userName; private int age; private List<String> hobbies; private Date dateOfBirth; public Date getDateOfBirth() { return dateOfBirth; } public void setDateOfBirth(Date dateOfBirth) { this.dateOfBirth = dateOfBirth; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List<String> getHobbies() { return hobbies; } public void setHobbies(List<String> hobbies) { this.hobbies = hobbies; } }
Create
registration.jsp, hello.jsp files under WEB-INF/jsp folder.
registration.jsp
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <html> <head> <title>User Information Page</title> </head> <body> <h2 style="color:red;"><form:errors path="studentInfo.*" /></h2> <form method="post" action="/springdemo/registerMe" id="f1"> <table> <tr> <td>User Name :</td> <td><input type="text" name="userName" value="" /></td> </tr> <tr> <td>Age :</td> <td><input type="text" name="age" value="" /></td> </tr> <tr> <td>Hobbies :</td> <td><select multiple name="hobbies"> <option value="cricket">Cricket</option> <option value="chess">Chess</option> <option value="football">Football</option> <option value="tennis">Tennis</option> </select></td> </tr> <tr> <td>Date Of Birth</td> <td><input type="text" name="dateOfBirth" value="" /></td> </tr> <tr> <td><input type="submit" name="submit" value="submit" style="font-size: 18px;" /></td> </tr> </table> </form> </body> </html>
welcome.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Hello World Spring Web MVC</title> </head> <body> <h1>${message}</h1> <h3> User Name : ${studentInfo.userName} <br /> Age : ${studentInfo.age} <br /> Hobbies: ${studentInfo.hobbies} <br /> Date Of Birth: ${studentInfo.dateOfBirth} </h3> </body> </html>
Create
web.xml, HelloWorld-servlet.xml files under WEB-INF folder.
web.xml
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring MVC Hello WorldApplication</display-name> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
HelloWorld-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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"> <context:component-scan base-package="com.sample.myApp" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
Create
index.jsp file under webapp folder.
index.jsp
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <html> <head> <title>Welcome Page</title> </head> <body> <h3>Dear Student, click on below button to register yourself</h3> <form method="post" action="/springdemo/registration" id="f1"> <input type="submit" name="submit" value="submit" style="font-size: 18px;" /> </form> </body> </html>
Project structure
looks like below.
Run
the application on server. You can able to get below kind of screen.
Fill
the registration form, fill the date in ‘YYYY/MM/DD’ format. Click on submit
button.
You
can able to see successful message like below.
Now
go back to the registration page again and enter the date in ‘YYYY@@MM@@DD’
format.
Click
on submit button, you can able to see below kind of data bind error.
It
is because, spring doesn’t know how to bind the string of format ‘YYYY@@MM@@DD’
to date type.
How to bind the Date
of different format?
By
using custom property editors, we can customize the data binding process.
For
example, below method customize the date format. I am using spring
CustomDateEditor class to support custom date format.
@InitBinder
public
void customizeBinding(WebDataBinder dataBinder) {
SimpleDateFormat dateFormat = new
SimpleDateFormat("YYYY@@MM@@DD");
dataBinder.registerCustomEditor(Date.class,
"dateOfBirth", new CustomDateEditor(dateFormat, false));
}
Update
HelloWorldController class like below.
HelloWorldController.java
package com.sample.myApp.controllers; import java.sql.Date; import java.text.SimpleDateFormat; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.sample.myApp.model.Student; @Controller public class HelloWorldController { @InitBinder public void customizeBinding(WebDataBinder dataBinder) { SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY@@MM@@DD"); dataBinder.registerCustomEditor(Date.class, "dateOfBirth", new CustomDateEditor(dateFormat, false)); } @RequestMapping("/registration") public String getRegistrationpage() { return "registration"; } @RequestMapping("/registerMe") public ModelAndView getHelloMessage(@ModelAttribute("studentInfo") Student student, BindingResult bindingResult) { if (bindingResult.hasErrors()) { ModelAndView modelAndView = new ModelAndView("registration"); return modelAndView; } ModelAndView modelAndView = new ModelAndView("welcome"); modelAndView.addObject("message", "Dear User, your details are registered"); return modelAndView; } }
Re
deploy the application on server. Now enter the date in ‘YYYY@@MM@@DD’ format.
Click
on submit button. You can able to see successful message.
In
my next post, I am going to explain about property editors.
No comments:
Post a Comment