SpringMVC处理Form表单-创新互联

一 测试项目搭建

创新互联公司-专业网站定制、快速模板网站建设、高性价比鸡西梨树网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式鸡西梨树网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖鸡西梨树地区。费用合理售后完善,10年实体公司更值得信赖。

(1)新建Java Web项目,并引入几个SpringMVC项目所需要的jar包,项目结构和所需要的jar包如下:

SpringMVC处理Form表单  SpringMVC处理Form表单

(2)web.xml与springmvc的相关配置:

i)web.xml:



	
		springmvc
		org.springframework.web.servlet.DispatcherServlet
		1
	

	
		springmvc
		*.html
	
	
	
		characterEncodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			UTF-8
		
	
	
		characterEncodingFilter
		/*
	

这里定义了SpringMVC拦截以.html结尾的url后缀并进行处理

ii)springmvc-servlet.xml:




	

	  
     

	
		
		
	

在上面的配置文件中,激活了Bean中定义的一些注解,而则启动了SpringMVC的一些默认配置。在配置文件的最后则定义了逻辑视图到实际视图之间的对应关系,一句话解释就是:给返回的逻辑视图加上上面定义的路径前缀和后缀就是实际视图的真正路径了。

二 使用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;
}

下面将依照程序的执行流程来简单说明SpringMVC的Form表单处理,分别是前台的form表单填写 –>controller处理 –>处理结果视图页面

(2)测试项目的首页与form表单页面:

i)首页index.jsp:

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

可以看出,在这里我们的首页很简单,就是重定向到“form.html”,但是通过我们前面在web.xml中的配置,SpringMVC将会对这个请求转到一个具体的controller中进行处理,当然这里就是直接转到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"%>



Spring MVC Form Handling


	

用户注册

姓名:
密码:
工作:
生日:
性别:
居住地:
吸烟吗:

由于我们把这个页面放在了WEB-INF目录下,因此是不能直接通过URL对这个文件进行访问的,必须前面定义的“form.html”转到controller处理后显示这个视图页面,这样做的目的是防止一些私密的页面在未授权的情况下被其他人随意访问。在上面的文件中,需要注意的是:

  • 为了简化form表单的写法,因此引入了SpringMVC的表单标签库,也就是文件顶部的:<%@taglib uri=”http://www.springframework.org/tags/form” prefix=”mvc”%>

  • modelAttribute表示手动绑定了一个名为“user”的实体类,该值与controller中处理转到这个form表单时设置的那个model值相对应

  • 表单中的path特性则是实现了对model的绑定,如:将该输入值设置成model类中的“name”属性。如果没有显式指定id和name属性,那么在页面中呈现的HTML input标签就会使用path特性来设置它的id和name属性

(3)业务逻辑处理的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”请求转到真实的form表单以及对form表单的处理。在对表单处理时通过@ModelAttribute注解接收了一个User类型的“u”,也就是前面填写的form表单,后面就是表单的显示因此不多说

(4)测试:

i)表单填写:

SpringMVC处理Form表单

ii)结果显示:

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"%>




Spring MVC Form Handling


	

注册结果

姓名: ${u.name}
密码: ${u.password}
工作: ${u.job}
生日: ${u.birthDate}
性别: ${u.gender}
居住地: ${u.country}
吸烟吗: ${u.smoking}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享文章:SpringMVC处理Form表单-创新互联
新闻来源:http://pwwzsj.com/article/peseh.html