码迷,mamicode.com
首页 > 编程语言 > 详细

springMVC(12)------表单标签的使用

时间:2016-05-23 15:28:12      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:

spingmvc的form表单标签使用实例。

一,项目结构

技术分享

二,所需jar包

commons-logging.jar

spring-aop-4.1.8.RELEASE.jar

spring-beans-4.1.8.RELEASE.jar

spring-context-4.1.8.RELEASE.jar

spring-core-4.1.8.RELEASE.jar

spring-expression-4.1.8.RELEASE.jar

spring-web-4.1.8.RELEASE.jar

spring-webmvc-4.1.8.RELEASE.jar


以下两个为jstl标签库所需

standard.jar

jstl.jar


三,web.xml配置springmvc的DispatcherServlet

web.xml中主要进行DispatcherServlet配置和初始化springmvc.xml配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
		xmlns="http://java.sun.com/xml/ns/j2ee" 
		xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
		xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
		xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
		http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
		id="WebApp_ID" version="2.4">
  <!-- 配置DisptatcherServlet -->
  <servlet>
  	<servlet-name>springDispatcherServlet</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- 配置DispatcherServlet的初始化参数 -->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc.xml</param-value>
  	</init-param>
  	<!-- web应用被加载的时候创建servlet -->
  	<load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>springDispatcherServlet</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
  
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

四,springmvc.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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       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-4.1.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-4.1.xsd
            http://www.springframework.org/schema/aop 
            http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
            http://www.springframework.org/schema/mvc 
            http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-4.1.xsd">
    <!--  配置自动扫描的包  -->
    <context:component-scan base-package="com.lanhuigu.springmvc"/>
	<!-- 视图解析器 -->    
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          <!-- 配置前缀 -->
          <property name="prefix" value="/WEB-INF/views/"/>
          <!-- 配置后缀 -->
          <property name="suffix" value=".jsp"/>
    </bean>
    
    <!-- 自定义视图解析器:BeanNameViewResolver使用视图的名字解析视图 -->
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
    	<!-- 
    		设置该自定义视图解析器BeanNameViewResolver与 InternalResourceViewResolver视图解析器的优先级值,
    		InternalResourceViewResolver的order默认值为Integer的最大值,BeanNameViewResolver以下设置
    		order为100,order值越小,视图解析器的优先级越高。
    		该配置文件中自定视图解析器BeanNameViewResolver的优先级高于InternalResourceViewResolver,
    		每次先使用BeanNameViewResolver解析视图,如果实现不了需求,自动调用InternalResourceViewResolver
    		解析视图。
    	-->
    	<property name="order">
    		<value>100</value>
    	</property>
    </bean>
    
    <!-- 配置直接转发的页面 -->
    <mvc:view-controller path="/success" view-name="success"/>
    <!-- 解决mvc:view-controller配置后RequestMapping映射地址报404的问题 -->
    <mvc:annotation-driven></mvc:annotation-driven>
</beans>

五,实体类User和Address

User.java

package com.lanhuigu.springmvc.entities;

public class User {
	private String username;
	private String password;
	private Integer gender;
	private Address address;//级联类
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Integer getGender() {
		return gender;
	}
	public void setGender(Integer gender) {
		this.gender = gender;
	}
	public Address getAddress() {
		return address;
	}
	public void setAddress(Address address) {
		this.address = address;
	}
	/**
	 * 重写toString()方法
	 */
	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + ", gender=" + gender + ", address=" + address
				+ "]";
	}
	
}


Address.java

package com.lanhuigu.springmvc.entities;

public class Address {
	private Integer id;
	private String province;
	private String city;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getProvince() {
		return province;
	}
	public void setProvince(String province) {
		this.province = province;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
}

六,Restful风格action,文件在action包下

该控制类中有三个方法,数据均为模拟:

(1)queryList查询用户列表

(2)editInput初始添加用户的页面

(3)add添加用户的方法,这里没有连接数据库,主要目的是用于查看form表单提交的数据

package com.lanhuigu.springmvc.action;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.lanhuigu.springmvc.entities.Address;
import com.lanhuigu.springmvc.entities.User;

@RequestMapping("/testRestful")
@Controller
public class TestRestfulAction {
	/**
	 * 查询列表数据
	 * @param map
	 * @return
	 */
	@RequestMapping("/list")
	public String queryList(Map<String, Object> map) {
		List<User> lists = new ArrayList<User>();
		User user = new User();
		user.setUsername("ONE");
		user.setPassword("111111");
		Address address = new Address();
		address.setProvince("aaaaaa");
		address.setCity("bbbbbb");
		
		user.setAddress(address);
		lists.add(user);
		
		map.put("users", lists);
		return "list";
	}
	/**
	 * 初始化编辑页面
	 * @param map
	 * @return
	 */
	@RequestMapping(value="/input",method=RequestMethod.GET)
	public String editInput(Map<String, Object> map) {
		map.put("user", new User());
		return "input";
	}
	
	/**
	 * 添加用户
	 * @param user
	 * @return
	 */
	@RequestMapping(value="/addUser",method=RequestMethod.POST)
	public String add(User user) {
		System.out.println(
				"username:"+user.getUsername() + "  " +
				"password:"+user.getPassword() + "  " +
				"gender:"+user.getGender() + "  " +
				"province:"+user.getAddress().getProvince() + "  " +
				"city:"+user.getAddress().getCity());
		return "redirect:/testRestful/list";
	}
}


七,list.jsp页面,该页面位于WEB-INF下的views下

该页面为列表展示页面,页面上有个add user添加用户的超链接,用于初始化用户添加页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
 %>  
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
 <html>  
    <head>  
      <title>spring MVC实例初体验</title>  
    </head>  
      
    <body>  
    	<table border="1" cellpadding="10" cellspacing="0">
    		<tr>
    			<th>username</th>
    			<th>password</th>
    			<th>province</th>
    			<th>city</th>
    		</tr>
    		
    		<c:forEach items="${users }" var="user">
    			<tr>
    				<td>${user.username }</td>
    				<td>${user.password }</td>
    				<td>${user.address.province }</td>
    				<td>${user.address.city }</td>
    			</tr>
    		</c:forEach>
    	</table>
        <div><a href="input">ADD USER</a></div>
 </body>  
</html>

input.jsp初始化编辑页面,位于views下,位置同list.jsp,内容如下:

添加用户的页面,该页面的map代码在实际中均可通过数据库查询封装,或模型数据定义等实现,这里直接通过Java代码在jsp页面完成。

该页通过post方式提交到addUser这个action地址,modelAttribute为表单属性,它会自动的绑定来自Model中的一个属性值到当前form对应的实体对象,

默认是command属性,找不到command时会报错,我们手动封装一个空的user替代。spring表单提交方式除了get,post外还有delete,put等。

<%@page import="com.lanhuigu.springmvc.entities.Address"%>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
 %>  
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
 <html>  
    <head>  
      <title>spring MVC实例初体验</title>  
    </head>  
      
    <body>  
      <!-- 
      	action属性的addUser为表单提交路径,method的post为提交方式 ,
      	modelAttribute为实体类,默认为command,如果找不到command会报错,
      	这里手动修改为user,表单初始化的方法中设置map.put("user", new User());
      -->
      <form:form action="addUser" method="POST" modelAttribute="user">
      	<!-- path属性对应html表单标签的name属性 -->
      	USERNAME:<form:input path="username" maxlength="20"/><br>
		PASSWORD:<form:password path="password"/><br>
		<%
			Map<Integer,String> genders = new HashMap<Integer,String>();
			genders.put(1, "男");
			genders.put(0, "女");
			
			request.setAttribute("genders", genders);
		%>
		GENDER:<form:radiobuttons path="gender" items="${genders }"/><br>
		<%
			Map<String,String> provinces = new HashMap<String,String>();
			provinces.put("1", "北京");
			provinces.put("2", "天津");
			
			request.setAttribute("provinces", provinces);
		%>
		<!-- path后面的address.province为级联属性 -->
		PROVINCE:<form:select path="address.province" items="${provinces }" ></form:select><br>
		<%
			Map<String,String> cities = new HashMap<String,String>();
			cities.put("1", "东城");
			cities.put("2", "西城");
			
			request.setAttribute("cities", cities);
		%>
		CITY:<form:select path="address.city" items="${cities }"></form:select><br>
		<input type="submit" value="提交">
      </form:form>
    </body>  
</html>  

八,访问地址测试

测试逻辑:通过第一地址到用户列表页面,点击add user都添加用户初始化页面,完成页面填写提交表单,

控制台查看或debugger追踪查看提交效果,体验spring的form表单在springmvc中实际应用。

http://localhost:9000/SpringMVC/testRestful/list到列表展示页面:

技术分享

点击ADD USER到添加用户表单页面:

技术分享

提交表单,查看控制台,或在input方法下debugger看看user是否获取表单页面提交的值

九,控制台输出结果

技术分享

十,总结分析

对form表单列了个图:

技术分享

对于以上这标签的用法类似html中的表单使用,个别标签的属性有区别,不过都是顾名思义。

springMVC(12)------表单标签的使用

标签:

原文地址:http://blog.csdn.net/yhl_jxy/article/details/51476949

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!