Spring MVC提供了一個JSP標籤庫(Spring Form),使將表單元素綁定到Model 數據變得更加容易。Spring Framework 提供了一些標籤,用於顯示 錯誤,設置主題和輸出國際化消息。html
須要在jsp文件頭部加上:java
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form">
1.修改web.xml以配置Dispatcher Servlet。
web.xmlgit
<?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>
dispatcher-servlet.xmlgithub
<?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.建立一個Jsp文件以從用戶index.jsp接收輸入,該文件包含帶有Spring Form標籤的全部表單字段。web
index.jspspring
<%@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.建立另外一個Jsp文件success.jsp,它是用於顯示輸出的Spring視圖。在此文件中,咱們使用表達式語言來顯示詳細信息。spring-mvc
success.jspsession
<%@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.建立一個Java類文件Registration.java,其中包含註冊應用程序的業務邏輯。在這裏,此文件包含8個私有變量,它們分別具備getter和setter方法,用於存儲註冊細節。mvc
Registration.javaapp
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.建立一個RegistrationFormController.java文件,該文件擴展了SimpleFormController以控制用戶請求並返回相應的ModelAndView對象。
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,建立一個registrationValidator.java文件來驗證諸如用戶名和密碼之類的表單字段不能爲空.DispatcherServlet負責賦予屬性以將Validator添加到用戶請求並執行驗證。
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,建立或修改 messages.properties 文件,其中包含各自鍵值的消息,在此文件中,咱們爲兩個鍵值編寫消息,分別爲空用戶名和空密碼。
messages.properties
error.empty.username=Please Enter User name error.empty.password=Please Enter Password
9,構建並運行應用程序
輸出
訪問頁面:http://localhost:8080/Registration/index.html
清空密碼時,使用spring錯誤標籤顯示相應的錯誤消息。
只有在正確驗證用戶名和密碼後,咱們才能提交表單。
顯示輸出,其中包含全部提交註冊的值
原文使用的較早的Spring版本(<3),更新後的源碼放在 https://github.com/yujiaao/sp... 供參考。