Spring MVC 数据绑定(四)

时间:2023-03-09 17:32:40
Spring MVC 数据绑定(四)
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";
} }

控制台显示:

Spring MVC 数据绑定(四)

数据绑定over。