SpringMVC学习笔记之---数据绑定
SpringMVC数据绑定
一.基础配置
(1)pom.xml
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
(2)web.xml
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
(3)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: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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--配置包扫描-->
<context:component-scan base-package="controller,dao"></context:component-scan>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置前缀-->
<property name="prefix" value="/"></property>
<!--配置后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
<!--消息转换器-->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
</mvc:message-converters>
</mvc:annotation-driven>
</beans>
(4)Course.java(实体类)
package entity;
public class Course {
private int id;
private String name;
private double price;
private Author author;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Author getAuthor() {
return author;
}
public void setAuthor(Author author) {
this.author = author;
}
@Override
public String toString() {
return "Course{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
", author=" + author +
'}';
}
}
(5)Author.java(实体类)
package entity;
public class Author {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
(6)SaveDao.java(用于保存的dao)
package dao;
import entity.Course;
import org.springframework.stereotype.Repository;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@Repository
public class SaveDao {
private Map<Integer,Course> map=new HashMap<Integer, Course>();
public void save(Course course){
map.put(course.getId(),course);
}
public Collection<Course> getall(){
return map.values();
}
}
(7)index.jsp(用于遍历显示)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<table>
<tr>
<td>课程ID</td>
<td>课程名</td>
<td>课程价格</td>
<td>讲师ID</td>
<td>讲师名</td>
</tr>
<c:forEach items="${courses}" var="course">
<tr>
<td>${course.id}</td>
<td>${course.name}</td>
<td>${course.price}</td>
<td>${course.author.id}</td>
<td>${course.author.name}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
二.数据绑定分类
(一)普通数据类型的数据绑定
(二)包装类的数据绑定
(三)数组类型的数据绑定
(四)对象类型的数据绑定
(五)List集合类型的数据绑定
(六)Map集合类型的数据绑定
(七)Set集合类型的数据绑定
DataController.java
package controller;
import dao.SaveDao;
import entity.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class DataController {
@Autowired
private SaveDao saveDao;
/**
* 基本数据类型的数据绑定
* @param id
* @return
*/
@RequestMapping("/one")
@ResponseBody //将返回值显示到页面
public String one(@RequestParam(value="id") int id){
return "id:"+id;
}
/**
* 包装类的数据绑定
* @param id
* @return
*/
@RequestMapping("/two")
@ResponseBody
public String two(@RequestParam(value="id")Integer id){
return "id"+id;
}
/**
* 数组类型的数据绑定
* @param three
* @return
*/
@RequestMapping("/three")
@ResponseBody
public String three(String[] three){
StringBuffer st=new StringBuffer();
for(String s:three){
st.append(s).append(" ");
}
return st.toString();
}
/**
* 对象类型的数据绑定
* 对象保存,在dao层进行
* @param course
* @return
*/
@RequestMapping("/four")
public ModelAndView four(Course course){
saveDao.save(course);
ModelAndView modelAndView=new ModelAndView();
modelAndView.setViewName("index");
modelAndView.addObject("courses",saveDao.getall());
return modelAndView;
}
/**
* List集合类型的数据绑定
* 不能直接绑定集合,应该创建一个包装类
* @param courceList
* @return
*/
@RequestMapping("/five")
public ModelAndView five(CourceList courceList){
for(Course course:courceList.getCourses()){
saveDao.save(course);
}
ModelAndView modelAndView=new ModelAndView();
modelAndView.setViewName("index");
modelAndView.addObject("courses",saveDao.getall());
return modelAndView;
}
/**
* Map集合类型的数据绑定
* @param courseMap
* @return
*/
@RequestMapping("/six")
public ModelAndView six(CourseMap courseMap){
for(Course course:courseMap.getMap().values()){
System.out.println(course);
saveDao.save(course);
}
ModelAndView modelAndView=new ModelAndView();
modelAndView.setViewName("index");
modelAndView.addObject("courses",saveDao.getall());
return modelAndView;
}
/**
* Set集合类型的数据绑定
* @param courseSet
* @return
*/
@RequestMapping("/seven")
public ModelAndView seven(CourseSet courseSet){
for(Course course:courseSet.getSet()){
saveDao.save(course);
}
ModelAndView modelAndView=new ModelAndView();
modelAndView.setViewName("index");
modelAndView.addObject("courses",saveDao.getall());
return modelAndView;
}
@RequestMapping(value="/eight")
@ResponseBody
public String eight(@RequestBody User user){
user.setName("成功");
System.out.println("==========");
return "aa";
}
}
三.数据绑定所需的类和页面
(一)普通数据类型
(二)包装类
(三)数组类型
(四)对象类型
1.save.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/four" method="post">
课程ID:<input type="text" name="id">
课程名:<input type="text" name="name">
课程价格:<input type="text" name="12.5">
讲师ID:<input type="text" name="author.id">
讲师名:<input type="text" name="author.name">
<input type="submit">
</form>
</body>
</html>
(五)List集合
1.CourseList.java
package entity;
import java.util.List;
public class CourceList {
private List<Course> courses;
public List<Course> getCourses() {
return courses;
}
public void setCourses(List<Course> courses) {
this.courses = courses;
}
}
2.saveList.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/five" method="post">
课程1ID:<input type="text" name="courses[0].id">
课程1名:<input type="text" name="courses[0].name">
课程1价格:<input type="text" name="courses[0].price">
讲师1ID:<input type="text" name="courses[0].author.id">
讲师1名:<input type="text" name="courses[0].author.name">
课程2ID:<input type="text" name="courses[1].id">
课程2名:<input type="text" name="courses[1].name">
课程2价格:<input type="text" name="courses[1].price">
讲师2ID:<input type="text" name="courses[1].author.id">
讲师2名:<input type="text" name="courses[1].author.name">
<input type="submit">
</form>
</body>
</html>
(六)Map集合
1.CourseMap.java
package entity;
import java.util.Map;
public class CourseMap {
private Map<String,Course> map;
public Map<String, Course> getMap() {
return map;
}
public void setMap(Map<String, Course> map) {
this.map = map;
}
@Override
public String toString() {
return "CourseMap{" +
"map=" + map +
'}';
}
}
2.saveMap.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/six" method="post">
课程1ID:<input type="text" name="map['one'].id">
课程1名:<input type="text" name="map['one'].name">
课程1价格:<input type="text" name="map['one'].price">
讲师1ID:<input type="text" name="map['one'].author.id">
讲师1名:<input type="text" name="map['one'].author.name">
课程2ID:<input type="text" name="map['two'].id">
课程2名:<input type="text" name="map['two'].name">
课程2价格:<input type="text" name="map['two'].price">
讲师2ID:<input type="text" name="map['two'].author.id">
讲师2名:<input type="text" name="map['two'].author.name">
<input type="submit">
</form>
</body>
</html>
(七)Set集合
1.CourseSet.java
package entity;
import java.util.HashSet;
import java.util.Set;
public class CourseSet {
private Set<Course> set=new HashSet<Course>();
public Set<Course> getSet() {
return set;
}
public void setSet(Set<Course> set) {
this.set = set;
}
public CourseSet(){
set.add(new Course());
set.add(new Course());
}
}
2.saveSet.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/seven" method="post">
课程1ID:<input type="text" name="set[0].id">
课程1名:<input type="text" name="set[0].name">
课程1价格:<input type="text" name="set[0].price">
讲师1ID:<input type="text" name="set[0].author.id">
讲师1名:<input type="text" name="set[0].author.name">
课程2ID:<input type="text" name="set[1].id">
课程2名:<input type="text" name="set[1].name">
课程2价格:<input type="text" name="set[1].price">
讲师2ID:<input type="text" name="set[1].author.id">
讲师2名:<input type="text" name="set[1].author.name">
<input type="submit">
</form>
</body>
</html>
-----------------------------------demo12------------------------------------
SpringMVC学习笔记之---数据绑定的更多相关文章
- SpringMVC:学习笔记(5)——数据绑定及表单标签
SpringMVC——数据绑定及表单标签 理解数据绑定 为什么要使用数据绑定 基于HTTP特性,所有的用户输入的请求参数类型都是String,比如下面表单: 按照我们以往所学,如果要获取请求的所有参数 ...
- 史上最全的SpringMVC学习笔记
SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...
- springmvc学习笔记(常用注解)
springmvc学习笔记(常用注解) 1. @Controller @Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用@Controller注解定义的控制器有如 ...
- SpringMVC学习笔记之二(SpringMVC高级参数绑定)
一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...
- springmvc学习笔记--REST API的异常处理
前言: 最近使用springmvc写了不少rest api, 觉得真是一个好框架. 之前描述的几篇关于rest api的文章, 其实还是不够完善. 比如当遇到参数缺失, 类型不匹配的情况时, 直接抛出 ...
- springmvc学习笔记---面向移动端支持REST API
前言: springmvc对注解的支持非常灵活和飘逸, 也得web编程少了以往很大一坨配置项. 另一方面移动互联网的到来, 使得REST API变得流行, 甚至成为主流. 因此我们来关注下spring ...
- SpringMVC:学习笔记(8)——文件上传
SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...
- springmvc学习笔记(简介及使用)
springmvc学习笔记(简介及使用) 工作之余, 回顾了一下springmvc的相关内容, 这次也为后面复习什么的做个标记, 也希望能与大家交流学习, 通过回帖留言等方式表达自己的观点或学习心得. ...
随机推荐
- [apue] 多进程管道读写的一些疑问
对于一对一的pipe: 1) 写进程关闭写管道后,读进程继续读管道会导致read返回0: 2) 读进程关闭读管道后,写进程继续写管道会激发SIGPIPE信号,若捕获,则write返回-1: 而对于多对 ...
- 微信小程序在ios下Echarts图表不能滑动的解决方案
问题现象 这个问题的现象说起来很简单. 小程序页面中有一篇很长的文章,内部有一个Echarts图表,手指上下滑动观看内容. 但是手指滑动区域在Echarts图表上时,页面却不能滑动了. 如下图: 追踪 ...
- HDU 5113:Black And White(DFS)
题目链接 题意 给出一个n*m的图,现在有k种颜色让你对这个图每个格子染色,每种颜色最多可以使用col[i]次,问是否存在一种染色方案使得相邻格子的颜色不同. 思路 以为是构造题,结果是爆搜.对于每一 ...
- scrapy实战2分布式爬取lagou招聘(加入了免费的User-Agent随机动态获取库 fake-useragent 使用方法查看:https://github.com/hellysmile/fake-useragent)
items.py # -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentati ...
- c++稍微复杂桶排序(未完待续~)
由于上次的桶排序占用空间太多,这次又有了一个新的办法 直接上代码: #include <bits/stdc++.h> using namespace std; int n; void bu ...
- 腾讯架构师分享的Java程序员需要突破的技术要点
一.源码分析 源码分析是一种临界知识,掌握了这种临界知识,能不变应万变,源码分析对于很多人来说很枯燥,生涩难懂. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 我认为是阅读源码的最核心 ...
- windows软件卸载工具Geek Uninstaller免安装版
曾经一个问题一直困扰这我,就是每次在卸载软件的时候都卸载不干净,卸载完后会有遗留文件夹,每次都要手动删,还有注册表也不干净,让我很是难受,直到有一天发现了一个卸载神器Geek Uninstaller ...
- FTP工具便携版 FileZilla 3.38.0
FileZilla 客户端是一个快速可靠的.跨平台的FTP,FTPS和SFTP客户端.具有图形用户界面(GUI)和很多有用的特性.由NoCmd提供的 FileZilla Client 中文便携版,具有 ...
- 用Supervisor实现进程守护,在异常退出时自动重启
程序启动后,有些是以daemon的形式运行,但在意外退出后,如果不能及时重新启动,会有比较严重的影响. 比如Zimg在图片处理中由于某些图片处理失败,会导致zimg进程挂掉,影响正常的服务提供,并且只 ...
- 视频4K技术的解读
前几年4K技术就已经有人提及,今年更是成了一个非常热门的词汇,而且4K技术已经普遍应用于各类终端,如电视机.机顶盒.手机等.那么如何来理解4K这个东东呢?今天博主就谈谈自己对4K技术的认识. 博主认为 ...