Spring框架之 理解数据绑定

参考视频做法:传送门

 

实验目标:

  (1) 映射URL绑定的占位符到方法入参 使用@pathVarible

(2)绑定请求参数到控制器方法参数 使用@RequestParam

(3)将请求参数绑定到控制器方法的表单对象

(4)将请求参数绑定到控制器方法的Map对象

 

 

(1) 映射URL绑定的占位符到方法入参 使用@pathVarible:

用法:

 

2)绑定请求参数到控制器方法参数 使用@RequestParam

步骤:

在控制器方法入参处使用@RequestParam注解可以将请求参数传递给方法,通过@RequestParam注解的value属性指定参数名,required属性指定参数是否必须,默认为true,表示请求参数中必须包含对应的参数,如果不存在,则抛出异常。

在SpringMVCHandler类中添加方法requestParam,使用@RequestParam注解绑定请求参数到控制器方法参数。如图所示。

在index.jsp页面中添加一个“Request Param”超链接,如下所示:<a href="springmvc/requestParam?userName=my&password=123456">Request Param</a>

浏览页面index.jsp,单击“Request Param”链接,控制台输出“Request Param:my 123456”。

index.jsp:

	<a href="springmvc/requestParam?username=my&password=123456">Request Param</a>

SpringMVCHandler.java:

@RequestMapping("/requestParam")
	public String requestParam(@RequestParam(value="username")String userName,@RequestParam(value="password")String passWord)
	{
		System.out.println("request Param:"+userName+" "+passWord);
		return "success";
	}

(3)将请求参数绑定到控制器方法的表单对象

步骤:

Spring MVC会按照参数名和属性名进行自动匹配,自动为该对象填充属性值,并且支持级联。首先在项目的src目录下创建包com.springmvc.entity,在包中创建实体类UserInfo.java和Address.java。

然后在SpringMVCHandler类中添加方法saveUserInfo,将请求参数绑定到控制器方法的表单对象UserInfo中。如图所示。

最后在index.jsp页面中创建一个表单,如图所示。

浏览页面index.jsp,在表单中输入用户名“my”,密码“123456”,省份“JiangSu”和城市“NanJing”,单击“提交”按钮,控制台输出如下:UserInfo [userName=my, password=123456, favorate=null, address=Address [province=JiangSu, city=NanJing]

 

创建一个新类:

package com.springmvc.entity;

public class UserInfo {
	private String username;
	private String password;
	private String favorite;
	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 String getFavorite() {
		return favorite;
	}
	public void setFavorite(String favorite) {
		this.favorite = favorite;
	}
	public Address getAddress() {
		return address;
	}
	public void setAddress(Address address) {
		this.address = address;
	}
	public UserInfo(String username, String password, String favorite, Address address) {
	
		this.username = username;
		this.password = password;
		this.favorite = favorite;
		this.address = address;
	}
	public UserInfo() {
		super();
	}
	@Override
	public String toString() {
		return "UserInfo [username=" + username + ", password=" + password + ", favorite=" + favorite + ", address="
				+ address + "]";
	}
	

	
}

和address类:

package com.springmvc.entity;

public class Address {
	private String province;
	private String city;
	public Address(String province, String city) {
	
		this.province = province;
		this.city = city;
	}
	@Override
	public String toString() {
		return "Address [province=" + province + ", city=" + city + "]";
	}
	public String getCity() {
		return city;
	}
	public String getProvince() {
		return province;
	}
	public void setProvince(String province) {
		this.province = province;
	}
	public void setCity(String city) {
		this.city = city;
	}
	public Address() {
		super();
	}
}

index.jsp

<form action="springmvc/saveUserInfo" method="post"><!-- 表单提交 -->
		username:<input type="text" name="username"><br>
		password:<input type="text" name="password"><br>
		province:<input type="text" name="address.province"><br>
		city:<input type="text" name="address.city"><br>
		<input type="submit" value="提交"><br>
	</form>

结果截图:

 

4)将请求参数绑定到控制器方法的Map对象

步骤:

Spring MVC注解可以将表单数据传递到控制器方法中的Map类型的入参中,在com.springmvc.entity包中创建UserInfoMap类,定义Map<String,UserInfo>类型的属性uiMap,并为该属性提供get和set方法,代码如图所示。

在SpringMVCHandler类中添加方法getUserInfos,实现将请求参数绑定到控制器方法的Map对象,并遍历Map,将Map中的内容输出到控制台。如图所示。

在index.jsp页面中创建一个表单,如图所示。

浏览页面index.jsp,在表单中分别输入两个用户的信息。第一个用户的用户名“my”,密码“123456”,省份“JiangSu”和城市“NanJing”;第一个用户的用户名“sj”,密码“123456”,省份“JiangSu”和城市“YangZhou”。单击“提交”按钮,控制台输出如图所示。

 

 

创建Map类,键值是String类型,键值对是userInfo类

package com.springmvc.entity;

import java.util.Map;

public class UserInfoMap {
	
	private Map<String,UserInfo> uiMap;

	public Map<String, UserInfo> getUiMap() {
		return uiMap;
	}

	public void setUiMap(Map<String, UserInfo> uiMap) {
		this.uiMap = uiMap;
	}
	
}

index.jsp里的写法:

<form action="springmvc/getUserInfo" method="post">
		username1:<input type="text" name="uiMap['u1'].username"><br>
		password1:<input type="text" name="uiMap['u1'].password"><br>
		province1:<input type="text" name="uiMap['u1'].address.province"><br>
		city1:<input type="text" name="uiMap['u1'].address.city"><br>
		
		username2:<input type="text" name="uiMap['u2'].username"><br>
		password2:<input type="text" name="uiMap['u2'].password"><br>
		province2:<input type="text" name="uiMap['u2'].address.province"><br>
		city2:<input type="text" name="uiMap['u2'].address.city"><br>
		
		<input type="submit" value="提交"><br>
	</form>

实验结果:

 

发布了499 篇原创文章 · 获赞 67 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_41286356/article/details/105082425