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

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中的表单使用,个别标签的属性有区别,不过都是顾名思义。

时间: 2024-10-11 16:13:46

springMVC(12)------表单标签的使用的相关文章

SpringMVC 之 表单标签

本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图上展示WebModel中的数据更加轻松. 一.首先我们先做一个简单了例子来对Spring MVC表单表单标签的使用有一个大致的印象,然后再结合例子对各个标签介绍一下如何使用. 1.首先,在com.demo.web.models包中添加一个模型TagsModel内容如下: package com.demo.web.models; import java.util.List; import ja

SpringMVC表单标签简介

转自:SpringMVC表单标签简介 在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 在正式介绍SpringMVC的表单标签之前,我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下指令: <%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>

SpringMVC&lt;from:form&gt;表单标签和&lt;input&gt;表单标签简介 转http://blog.csdn.net/hp_yangpeng/article/details/51906654

SpringMVC<from:form>表单标签和<input>表单标签简介 在使用SpringMVC的时候我们可以使用spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 在正式介绍SpringMVC的表单标签之前,我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下指令: Jsp代码 <%@taglib uri="http://www.springframework.org/tags/fo

SpringMVC学习记录(五)--表单标签

在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 1.引入标签头文件 在正式介绍SpringMVC的表单标签之前,我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下指令: <%@taglib prefix="sf" uri="http://www.springframework.org/tags/form" %> 2.form标签 使

(转载)SPRINGMVC表单标签简介

SpringMVC表单标签简介 在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 在正式介绍SpringMVC的表单标签之前,我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下指令: Jsp代码   <%@taglib uri="http://www.springframework.org/tags/form" prefix="form" 

第七节 认识SpringMVC中的表单标签

所谓成熟,就是:你要习惯,任何人的忽冷忽热:也要看淡,任何人的渐行渐远: --胖先生 SpringMVC的表单标签 回顾: JSTL标签 --C标签 FMT标签 自学:JSP如何自定义标签[开源社区当中有别人写好的标签] 表单标签:使用规则 模拟开发环境: 1.更新操作 A.通过主键进行查询 B.JSP显示 C.提交表单 @RequestMapping(value="/update/{user_id}",method=RequestMethod.GET) public ModelAnd

SpringMVC 表单标签 &amp; 处理静态资源

使用 Spring 的表单标签 通过 SpringMVC 的表单标签可以实现将模型数据中的属性和 HTML 表单元素相绑定,以实现表单数据更便捷编辑和表单值的回显. form 标签 一般情况下,通过 GET 请求获取表单页面,而通过POST 请求提交表单页面,因此获取表单页面和提交表单页面的 URL 是相同的.只要满足该最佳条件的契约,<form:form> 标签就无需通过 action 属性指定表单提交的 URL 可以通过 modelAttribute 属性指定绑定的模型属性,若 没有指定该

SpringMVC表单标签&amp;处理静态资源

使用 Spring 的表单标签 通过 SpringMVC 的表单标签可以实现将模型数据中的属性和 HTML 表单元素相绑定,以实现表单数据更便捷编辑和表单值的回显 form 标签 • 一般情况下, 通过 GET 请求获取表单页面,而通过POST 请求提交表单页面, 因此获取表单页面和提交表单页面的 URL 是相同的. 只要满足该最佳条件的契约, <form:form> 标签就无需通过 act一般情况下, 通过 GET 请求获取表单页面,而通过POST 请求提交表单页面, 因此获取表单页面和提交

SpringMVC学习系列(11) 之 表单标签

本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图上展示WebModel中的数据更加轻松. 一.首先我们先做一个简单了例子来对Spring MVC表单表单标签的使用有一个大致的印象,然后再结合例子对各个标签介绍一下如何使用. 1.首先,在com.demo.web.models包中添加一个模型TagsModel内容如下: package com.demo.web.models; import java.util.List; import ja