溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SpringMVC處理Form表單

發(fā)布時間:2020-06-11 17:47:49 來源:網(wǎng)絡(luò) 閱讀:895 作者:pangfc 欄目:開發(fā)技術(shù)

一 測試項目搭建

(1)新建Java Web項目,并引入幾個SpringMVC項目所需要的jar包,項目結(jié)構(gòu)和所需要的jar包如下:

SpringMVC處理Form表單  SpringMVC處理Form表單

(2)web.xml與springmvc的相關(guān)配置:

i)web.xml:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
	  http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>*.html</url-pattern>
	</servlet-mapping>
	
	<filter>
		<filter-name>characterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

</web-app>

這里定義了SpringMVC攔截以.html結(jié)尾的url后綴并進(jìn)行處理

ii)springmvc-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:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
       					   http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
       					   http://www.springframework.org/schema/context
       					   http://www.springframework.org/schema/context/spring-context-4.0.xsd
       					   http://www.springframework.org/schema/mvc 
       					   http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

	<context:component-scan base-package="cn.zifangsky.* *.controller" />

	<context:annotation-config />  <!-- 激活Bean中定義的注解 -->
    <mvc:annotation-driven /> 

	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/pages/" />
		<property name="suffix" value=".jsp" />
	</bean>
</beans>

在上面的配置文件中,<context:annotation-config />激活了Bean中定義的一些注解,而<mvc:annotation-driven />則啟動了SpringMVC的一些默認(rèn)配置。在配置文件的最后則定義了邏輯視圖到實際視圖之間的對應(yīng)關(guān)系,一句話解釋就是:給返回的邏輯視圖加上上面定義的路徑前綴和后綴就是實際視圖的真正路徑了。

二 使用SpringMVC處理Form表單

(1)在正式開始之前,先建立一個model和枚舉類:

i)實體類User:

package cn.zifangsky.model;

import java.time.LocalDate;

import org.springframework.format.annotation.DateTimeFormat;

public class User {
	private String name;
	private String password;
	private String job;
	@DateTimeFormat(pattern="yyyy-MM-dd")
	private LocalDate birthDate;
	private Gender gender;
	private String country;
	private boolean smoking;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

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

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}

	public LocalDate getBirthDate() {
		return birthDate;
	}

	public void setBirthDate(LocalDate birthDate) {
		this.birthDate = birthDate;
	}

	public Gender getGender() {
		return gender;
	}

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

	public String getCountry() {
		return country;
	}

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

	public boolean isSmoking() {
		return smoking;
	}

	public void setSmoking(boolean smoking) {
		this.smoking = smoking;
	}

}

ii)表示“性別”的枚舉類Gender:

package cn.zifangsky.model;

public enum Gender {
	MALE,
	FEMALE;
}

下面將依照程序的執(zhí)行流程來簡單說明SpringMVC的Form表單處理,分別是前臺的form表單填寫 –>controller處理 –>處理結(jié)果視圖頁面

(2)測試項目的首頁與form表單頁面:

i)首頁index.jsp:

<% response.sendRedirect("form.html"); %>

可以看出,在這里我們的首頁很簡單,就是重定向到“form.html”,但是通過我們前面在web.xml中的配置,SpringMVC將會對這個請求轉(zhuǎn)到一個具體的controller中進(jìn)行處理,當(dāng)然這里就是直接轉(zhuǎn)到form表單頁面。具體的controller里的處理邏輯下面再說

ii)form表單頁面userForm.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="mvc"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Spring MVC Form Handling</title>
</head>
<body>
	<h3>用戶注冊</h3>
	<mvc:form modelAttribute="user" action="result.html">
		<table>
			<tr>
				<td><mvc:label path="name">姓名:</mvc:label></td>
				<td><mvc:input path="name" /></td>
			</tr>
			<tr>
				<td><mvc:label path="password">密碼:</mvc:label></td>
				<td><mvc:password path="password" /></td>
			</tr>
			<tr>
				<td><mvc:label path="job">工作:</mvc:label></td>
				<td><mvc:textarea path="job" /></td>
			</tr>
			<tr>
				<td><mvc:label path="birthDate">生日:</mvc:label></td>
				<td><mvc:input path="birthDate" /></td>
			</tr>
			<tr>
				<td><mvc:label path="gender">性別:</mvc:label></td>
				<td><mvc:radiobuttons path="gender" items="${genders}" /></td>
			</tr>
			<tr>
				<td><mvc:label path="country">居住地:</mvc:label></td>
				<td><mvc:select path="country" items="${countries}" /></td>
			</tr>
			<tr>
				<td><mvc:label path="smoking">吸煙嗎:</mvc:label></td>
				<td><mvc:checkbox path="smoking" /></td>
			</tr>
			<tr>
				<td colspan="2"><input type="submit" value="Submit" /></td>
			</tr>
		</table>
	</mvc:form>
</body>
</html>

由于我們把這個頁面放在了WEB-INF目錄下,因此是不能直接通過URL對這個文件進(jìn)行訪問的,必須前面定義的form.html”轉(zhuǎn)到controller處理后顯示這個視圖頁面,這樣做的目的是防止一些私密的頁面在未授權(quán)的情況下被其他人隨意訪問。在上面的文件中,需要注意的是:

  • 為了簡化form表單的寫法,因此引入了SpringMVC的表單標(biāo)簽庫,也就是文件頂部的:<%@taglib uri=”http://www.springframework.org/tags/form” prefix=”mvc”%>

  • modelAttribute表示手動綁定了一個名為“user”的實體類,該值與controller中處理轉(zhuǎn)到這個form表單時設(shè)置的那個model值相對應(yīng)

  • 表單中的path特性則是實現(xiàn)了對model的綁定,如:<mvc:input path=”name” />將該輸入值設(shè)置成model類中的“name”屬性。如果沒有顯式指定id和name屬性,那么在頁面中呈現(xiàn)的HTML input標(biāo)簽就會使用path特性來設(shè)置它的id和name屬性

(3)業(yè)務(wù)邏輯處理的controller類UserController.java:

package cn.zifangsky.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import cn.zifangsky.model.Gender;
import cn.zifangsky.model.User;

@Controller
public class UserController {
	private static final String[] countries = {"China","Japan","North Korea","United States"};
	
	@RequestMapping(value="/form.html")
	public ModelAndView user(){
		ModelAndView modelAndView = new ModelAndView("userForm");
		modelAndView.addObject("user", new User());
		modelAndView.addObject("genders",Gender.values());
		modelAndView.addObject("countries", countries);
		
		return modelAndView;
	}
	
	@RequestMapping(value="/result.html")
	public ModelAndView processUser(@ModelAttribute(value="user") User u){
		ModelAndView modelAndView = new ModelAndView("userResult");
		modelAndView.addObject("u",u);
		
		return modelAndView;
	}
	
	
}

可以看出,在上面定義了兩個方法,它們的作用分別是針對“form.html”請求轉(zhuǎn)到真實的form表單以及對form表單的處理。在對表單處理時通過@ModelAttribute注解接收了一個User類型的“u”,也就是前面填寫的form表單,后面就是表單的顯示因此不多說

(4)測試:

i)表單填寫:

SpringMVC處理Form表單

ii)結(jié)果顯示:

SpringMVC處理Form表單


附(2016-05-18):

userResult.jsp頁面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="mvc"%>
<!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 MVC Form Handling</title>
</head>
<body>
	<h3>注冊結(jié)果</h3>
	<table>
		<tr>
			<td>姓名:</td>
			<td>${u.name}</td>
		</tr>
		<tr>
			<td>密碼:</td>
			<td>${u.password}</td>
		</tr>
		<tr>
			<td>工作:</td>
			<td>${u.job}</td>
		</tr>
		<tr>
			<td>生日:</td>
			<td>${u.birthDate}</td>
		</tr>
		<tr>
			<td>性別:</td>
			<td>${u.gender}</td>
		</tr>
		<tr>
			<td>居住地:</td>
			<td>${u.country}</td>
		</tr>
		<tr>
			<td>吸煙嗎:</td>
			<td>${u.smoking}</td>
		</tr>
	</table>
</body>
</html>


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI