Spring FORM tag library

Spring FORM tag library

Spring MVC provides a JSP tag library (Spring Form) to make it easier to bind form elements to Model data. The Spring Framework provides tags for displaying errors, setting topics, and outputting internationalized messages.

Syntax using Spring Form tag library

You need to add:

<%@taglib  uri="http://www.springframework.org/tags/form" prefix="form">

Form labels used in this example

  • Render the HTML "form" tag and expose the binding path to the internal tag for binding.
  • The HTML "input" tag with the binding value rendering type "text" is used.
  • Error rendering field in HTML'span'tag.
  • The HTML "input" tag of type "password" is rendered with the binding value.
  • HTML "input" tags with a rendering type of "radio".
  • Render the HTML "select" element. Support data binding to selected options.
  • Render a single HTML "option". Set "selected" appropriately according to the binding value.
  • Render HTML "textarea".
  • The HTML "input" tag with the rendering type of "checkbox" is presented.

Simple registration form example

1. Modify web.xml to configure Dispatcher Servlet.
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
  1. Create a dispatcher-servlet.xml file containing all configuration bean s used to process user requests, which process user requests and dispatch them to various controllers.

dispatcher-servlet.xml

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
      <property name="urlMap">
<map>
<entry  key="/index.html">
<ref bean="registrationController"/>
</entry>
</map>
</property>

 </bean>

<bean id="registrationValidator" class="registrationValidator"/>
<bean id="registrationController" class="RegistrationFormController">

<property name="sessionForm"><value>false</value></property>

<property name="commandName" value="registration"></property>

<property name="commandClass" value="Registration"></property>

<property name="validator"><ref bean="registrationValidator"/></property>
<property name="formView"><value>index</value></property>

<property name="successView"><value>success</value></property>

</bean>

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="messages"/>
    </bean>

     <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />
</beans>

3. Create a Jsp file to receive input from user index.jsp, which contains all form fields with Spring Form tags.

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib  uri="http://www.springframework.org/tags/form" prefix="form" %>
<!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=UTF-8">
        <title>Welcome to Spring Web MVC project</title>
    </head>

    <body bgcolor="DDDDDD">
        <h1>Spring Form tags Example</h1>
        <form:form commandName="registration" method="POST">

           User Name: <form:input path="username"/><font color="red">
               <form:errors path="username"/></font><br />
           Password: <form:password path="password"/><font color="red">
           <form:errors path="password"/></font><br />
           First Name: <form:input path="fname"/><br />
           Last Name: <form:input path="lname"/><br />
           Gender: <form:radiobutton path="gender" value="male"/>Male
               <form:radiobutton path="gender" value="female"/>Female<br />
                   Country :<form:select path="country" >
                       <form:option value="india">India</form:option>
                       <form:option value="india">USA</form:option>
                       <form:option value="india">Australia</form:option>
                   </form:select><br />
                   Address: <form:textarea path="addr"/><br />
                       Select any :<form:checkbox path="cb" value="checkbox1"/>
                       Check Box1
                       <form:checkbox path="cb" value="checkbox2"/>
                       Check Box2<br />

            <input type="submit" value="submit"/>
        </form:form>

    </body>
</html>

4. Create another Jsp file success.jsp, which is a Spring view for displaying output. In this file, we use expression language to display the details.

success.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page import="java.util.Enumeration"%>
<!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=UTF-8">
        <title>Spring Form Tags Example</title>
    </head>
    <body bgcolor="DDDDDD">
        <h1>Spring Form tags examples</h1>
        <h2>
         User Name: ${uname}<br />
         First Name: ${fname}<br />
         Last Name: ${lname}<br />
         Gender: ${gender}<br />
         Country: ${country}<br />
         Address: ${addr}<br />
         Selected Check box: ${cb}
</h2>

    </body>
</html>

5. Create a Java class file Registration.java, which contains business logic for registering applications. Here, the file contains eight private variables with getter and setter methods for storing registration details.

Registration.java

public class Registration {

    private String username;
    private String password;
    private String fname;
    private String lname;
    private String gender;
    private String country;
    private String addr;
    private String cb;

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    public String getCb() {
        return cb;
    }

    public void setCb(String cb) {
        this.cb = cb;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Registration() {
    }

    public String getFname() {
        return fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    public String getLname() {
        return lname;
    }

    public void setLname(String lname) {
        this.lname = lname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

}

6. Create a RegistrationFormController.java file that extends SimpleFormController to control user requests and return the corresponding ModelAndView object.

RegistrationFormController.java

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

public class RegistrationFormController extends SimpleFormController {

@Override
    protected ModelAndView onSubmit(Object command) throws Exception {

        Registration reg=(Registration)command;

        String uname=reg.getUsername();
        String fname=reg.getFname();
        String lname=reg.getLname();

        String gender=reg.getGender();
        String country=reg.getCountry();
        String cb=reg.getCb();
        String addr=reg.getAddr();

         ModelAndView mv = new ModelAndView(getSuccessView());

          mv.addObject("uname",uname);
          mv.addObject("fname",fname);
          mv.addObject("lname",lname);
          mv.addObject("gender",gender);
          mv.addObject("country",country);
          mv.addObject("cb",cb);
          mv.addObject("addr",addr);

        return mv;
    }

}

7. Create a registrationValidator.java file to verify that form fields such as username and password cannot be empty. Dispatcher Servlet is responsible for assigning properties to add Validator to user requests and perform validation.

registrationValidator.java

import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

public class registrationValidator implements Validator
{

    public boolean supports(Class cl) {
        return Registration.class.isAssignableFrom(cl);

    }

    public void validate(Object ob, Errors errors) {
       Registration reg=(Registration)ob;
       if (reg.getUsername() == null || reg.getUsername().length() == 0) {
            errors.rejectValue("username", "error.empty.username");
        }

       else if (reg.getPassword() == null || reg.getPassword().length() == 0) {
            errors.rejectValue("password", "error.empty.password");
        }

    }

}

8. Create or modify messages.properties file, which contains messages with their respective key values. In this file, we write messages for two key values, null username and null password.

messages.properties

error.empty.username=Please Enter User name
error.empty.password=Please Enter Password

9. Build and run applications

output

Access page: http://localhost:8080/Registration/index.html

When the password is cleared, the spring error label is used to display the corresponding error message.
Only after the user name and password are validated correctly can we submit the form.
Display output containing all submitted registered values

Tags: Java Spring JSP xml

Posted on Sun, 06 Oct 2019 18:12:06 -0400 by wil831