Spring支持多种形式的类型绑定,包括:
1、基本数据类型、String和String[]
2、简单对象类型
3、List类型
4、Set类型
5、Map类型
6、复合数据类型
 
 
接下来一个一个的实现:
1、基本数据类型、String和String[]。
请求处理方法:

public void registBean(String username,int age,double income,String[] interests,boolean marrid)

保证JSP页面上提交项和方法中对应参数同名。其中boolean的提交项的value是字符串true和false。

2、简单对象类型
请求处理方法:

public void registBean(UserBean2 user)

需要保证JSP页面上提交项和UserBean对象中的属性同名即可。
 
 
3、List类型
List需要绑定在Bean对象上,直接写在请求处理方法中作为参数是不行的,更重要的一点是要创建对象(ArrayList).

public class UserBean2{

private List<AddressListBean> list= new ArrayList<AddressListBean>();

}

请求处理方法:

public void registBean(UserBean2 user)

JSP页面上提交项的命名:参数名[下标].属性名。

4、 Set类型
与List方法类似,但是必须先在Set对象中Add相应的数量的模型对象.

public class UserBean2{

private Set<AddressSetBean> set= new HashSet<AddressSetBean>();

public Classes(){

set.add(new AddressSetBean());

set.add(new AddressSetBean());

set.add(newAddressSetBean());

}

}

5、Map对象
Map也需要绑定在Bean对象上。

public class UserBean2{

private Map<String String> map= new HashMap<String String>();

}

请求处理方法:

public void  registBean(UserBean2 user)

JSP页面上的提交项命名:参数名[‘键名’]
 
 
6、复合数据类型
所谓复合数据类型,指代自定义Bean中某个属性又是一个自定义Bean.

public class UserBean2{

private String name;

private int age;

private AddressBean address;

}

请求处理方法:

public void registBean(UserBean2 user)

JSP页面提交项命名:复合属性名.属性名

主要代码:

 package com.cy.springannotation.entity;

 import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set; public class UserBean2 {
private String username;
private int age;
private double income;
private String[] interests;
private boolean married;
//List不能单独使用,必须要绑定到某一个具体的Bean,并且要实例化ArrayList
private List<AddressListBean> list=new ArrayList<AddressListBean>();
//Set不能单独使用,必须要绑定到某一个具体的Bean,并且要实例化HashSet
private Set<AddressSetBean> set=new HashSet<AddressSetBean>();
//Map不能单独使用,必须要绑定到某一个具体的Bean,并且要实例化HashMap
private Map<String,AddressMapBean> map=new HashMap<String,AddressMapBean>();
//复合数据类型
private AddressBean address; public UserBean2(){
//set集合需要提前定义个数
for(int i=0;i<2;i++){
AddressSetBean asb=new AddressSetBean();
set.add(asb);
} }
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getIncome() {
return income;
}
public void setIncome(double income) {
this.income = income;
}
public String[] getInterests() {
return interests;
}
public void setInterests(String[] interests) {
this.interests = interests;
}
public boolean isMarried() {
return married;
}
public void setMarried(boolean married) {
this.married = married;
} public Map<String, AddressMapBean> getMap() {
return map;
}
public void setMap(Map<String, AddressMapBean> map) {
this.map = map;
} public Set<AddressSetBean> getSet() {
return set;
}
public void setSet(Set<AddressSetBean> set) {
this.set = set;
}
public List<AddressListBean> getList() {
return list;
}
public void setList(List<AddressListBean> list) {
this.list = list;
}
public AddressBean getAddress() {
return address;
}
public void setAddress(AddressBean address) {
this.address = address;
} }

页面设置“

 <%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<%
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>
<base href="<%=basePath%>"> <title>注册页面</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<form action="regist.do" method="post">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td>年龄:</td>
<td><input type="text" name="age"/></td>
</tr>
<tr>
<td>收入:</td>
<td><input type="text" name="income"/></td>
</tr>
<tr>
<td>兴趣:</td>
<td><input type="checkbox" name="interests" value="看书"/>看书
<input type="checkbox" name="interests" value="上网"/>上网
<input type="checkbox" name="interests" value="唱歌"/>唱歌
<input type="checkbox" name="interests" value="运动"/>运动
<input type="checkbox" name="interests" value="散步"/>散步
</td>
</tr>
<tr>
<td>是否结婚:</td>
<td><input type="radio" name="married" value="true" checked="checked"/>是
<input type="radio" name="married" value="false" />否
</td>
</tr>
<tr>
<td>list地址1:</td>
<td><input type="text" name="list[0].addressListName"/></td>
</tr>
<tr>
<td>list地址2:</td>
<td><input type="text" name="list[1].addressListName"/></td>
</tr> <tr>
<td>set地址1:</td>
<td><input type="text" name="set[0].addressSetName"/></td>
</tr>
<tr>
<td>set地址2:</td>
<td><input type="text" name="set[1].addressSetName"/></td>
</tr>
<tr>
<td>map地址1:</td>
<td><input type="text" name="map['a0'].addressMapName"/></td>
</tr>
<tr>
<td>map地址2:</td>
<td><input type="text" name="map['a1'].addressMapName"/></td>
</tr>
<tr>
<td>地址:</td>
<td><input type="text" name="address.addressName"/></td>
</tr>
<tr>
<td colspan="2"> <input type="submit" value="注册"/> </td>
</tr>
</table>
</form>
</body>
</html>

业务控制器:

 package com.cy.springannotation.controller;

 import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.cy.springannotation.entity.AddressListBean;
import com.cy.springannotation.entity.AddressSetBean;
import com.cy.springannotation.entity.UserBean2; @Controller
public class RegistController {
private Logger log = Logger.getLogger(this.getClass()); /* @RequestMapping("/regist.do")
public String regist(String username,int age,double income,String[] interests,boolean married){
log.info("username="+username);
log.info("age="+age);
log.info("income="+income);
log.info("interests="+interests.length);
log.info("married="+married);
for (String string : interests) {
log.info("兴趣有:"+string);
}
return "index"; }
*/
//简单对象类型
@RequestMapping("/regist.do")
public String registBean(UserBean2 user){
log.info("username:"+user.getUsername());
log.info("age:"+user.getAge());
log.info("income:"+user.getIncome());
log.info("interests.length:"+user.getInterests().length);
log.info("married:"+user.isMarried());
log.info("addressList.size():"+user.getList().size());
log.info("addressSet.size():"+user.getSet().size());
log.info("addressMap.size():"+user.getMap().size());
log.info("address:"+user.getAddress().getAddressName()); for (String string : user.getInterests()) {
log.info("具体的兴趣有=========" + string);
} for(AddressListBean add:user.getList()){
log.info("具体的list地址有=========" + add.getAddressListName());
} for(AddressSetBean asetb:user.getSet()){
log.info("具体的set地址有=========" + asetb.getAddressSetName());
} for(int i=0;i<2;i++){
log.info("具体的map地址有=========" + user.getMap().get("a"+i).getAddressMapName());
} return "index";
} }

控制台显示:

数据绑定over。

 

Spring MVC 数据绑定(四)的更多相关文章

  1. Spring MVC—数据绑定机制,数据转换,数据格式化配置,数据校验

    Spring MVC数据绑定机制 数据转换 Spring MVC处理JSON 数据格式化配置使用 数据校验 数据校验 Spring MVC数据绑定机制 Spring MVC解析JSON格式的数据: 步 ...

  2. spring mvc 数据绑定

    1.spring mvc 默认提供的数据绑定类 private List<HandlerMethodArgumentResolver> getDefaultArgumentResolver ...

  3. Spring MVC 数据绑定流程分析

    1.    数据绑定流程原理★ ①   Spring MVC 主框架将 ServletRequest  对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 Data ...

  4. Spring MVC数据绑定(一)

    1.数据绑定介绍 在执行程序时,Spring MVC会根据客户端请求参数的不同,将请求消息中的信息以一定的方式转换并绑定到控制器类的方法参数中.这种将请求消息数据与后台方法参数建立连接的过程就是Spr ...

  5. Spring MVC 梳理 - 四种HandlerMapping

    总结 (1)SpringMVC导入jar包,配置web.xml 这些都是基础的操作. (2)四种HandlerMapping:DefaultAnnotationHandlerMapping;Simpl ...

  6. spring mvc 数据绑定总结

    spring mvc 做web开发时,经常会不知道如何合适绑定页面数据.用惯struts2的朋友更认为spring mvc 绑定数据不如struts2方便(本人最开始也是这么认为),经过一段时间的应用 ...

  7. Spring MVC数据绑定大全 .

    刚开始用spring mvc 做web开发时,经常会不知道如何合适绑定页面数据.用惯struts2的朋友更认为spring mvc 绑定数据不如struts2方便(本人最开始也是这么认为),经过一段时 ...

  8. Spring MVC(十四)--SpringMVC验证表单

    在Spring MVC中提供了验证器可以进行服务端校验,所有的验证都必须先注册校验器,不过校验器也是Spring MVC自动加载的,在使用Spring MVC校验器之前首先要下载相关的jar包,下面是 ...

  9. Spring MVC 数据绑定 (四)

    完整的项目案例: springmvc.zip 目录 实例 项目结构路径: 一.配置web.xml <?xml version="1.0" encoding="UTF ...

随机推荐

  1. java关于StringBuffer和StringBuilder写入文件的效率问题

    StringBuffer在存储字符的时候,是有上限的,一旦达到上线就会出错,自己在项目中遇到一个从数据库中查询数据,然后写入到本地文件中 ,数据量大概有30万条,此时的效率十分的低.下面是大致的模拟该 ...

  2. Fishnet(暴力POJ 1408)

    Fishnet Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1911   Accepted: 1227 Descripti ...

  3. setprecision(int n)等格式函数用法 分类: POJ 2015-06-11 10:56 17人阅读 评论(0) 收藏

    **这些用法前最好用 #include <iostream>    //不要用iostream.h ,会出现好多问题 #include <iomanip> // io 流控制头 ...

  4. ASCII字符表

  5. WinFom基本属性

    常用窗体属性: AutoSroll:如果窗体内容超出了窗体范围,自动出现滚动条.默认是false. AutoSize:调节窗口大小时,保证使窗体内的内容必须全部显示出来. Location:控件左上角 ...

  6. python学习笔记六 初识面向对象上(基础篇)

    python面向对象   面向对象编程(Object-Oriented Programming )介绍   对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式,虽然大家都知道OOP的三大特性 ...

  7. 如何在Ubuntu/CentOS上安装Linux内核4.0

    大家好,今天我们学习一下如何从Elrepo或者源代码来安装最新的Linux内核4.0.代号为‘Hurr durr I'm a sheep’的Linux内核4.0是目前为止最新的主干内核.它是稳定版3. ...

  8. 我的android学习经历27

    前几天忙着学校的互联网+项目比赛,没有时间学习android和发一些东西,主要是这两天太累了,我是项目组长,好多东西去弄,今天已经交稿去进行初赛. 马上收拾收拾心情,继续我的andorid菜鸟之路 加 ...

  9. 我的android学习经历19

    怎样在标题栏中显示进度条 import android.app.Activity;import android.os.Bundle;import android.view.Window; public ...

  10. excel在一个图表内,显示折线图和柱状图

      折线图和柱状图,在同一个图表中拆分显示   一个图,设置主坐标轴 另外一个图,设置次坐标轴     拆分,通过调整纵坐标的最小值和最大值来实现     关于图表的标题,选中图表,选择布局,然后图表 ...