SpringMVC入门学习(三、表单数据封装)

SpringMVC封装表单数据

  • 基础数据
  • @RequestParam别名
  • 对象数据
  • VO对象
  • Map
  • 数组
  • list

基础数据的封装

//表单
<form action="reg1.action" method="post">
		<input type="text" name="name" value=""/>
		<input type="text" name="id" value=""/>
		<input type="submit" value="登录">
	
</form>

	//测试类
	@RequestMapping("/reg1.action")
	public String reg1(User user) {
		System.out.println(user);
		return "result";
	}
	@RequestMapping("/reg2.action")
	public String reg2(String name) {
		System.out.println(name);
		return "result";
	}
	@RequestMapping("/reg3.action")
	public String reg3(@RequestParam(value="name")String username) {
		System.out.println(username);
		return "result";
	}

//User类,省略get、set
public class User {
	private String name;
}
  • 上面的三个测试代码分别介绍了三种情况:
    • 普通数据
    • 别名数据
    • 对象
  • 注意事项:
    • 我们封装的时候,传入的参数必须要和表单的“name”属性一致
    • 如果封装的对象,对象的属性名必须和“name”属性一致,如果不一致,则为null

VO对象

//表单
<form action="reg4.action" method="post">
		<input type="text" name="name" value=""/>
		<input type="text" name="id" value=""/>
		<input type="submit" value="登录">
	</form>

//VO对象,省略get、set
public class UserVo {
	private int id;
	private User user;	
}

	//测试类
	@RequestMapping("/reg4.action")
	public String reg4(UserVo userVo,User user) {
		System.out.println(user);
		System.out.println(userVo);
		userVo.setUser(user);
		System.out.println(userVo);
		return "result";
	}
  • 这里的VO对象封装,我们采用的是设置对象的方法
  • 首先表单的ID属性会找到我们的VO对象,然后设置值
  • 然后表单的name属性会找到我们的User对象,然后设置值
  • 最后我们只需要吧user设置给VO就搞定
  • 当然,我们也可以吧表单的那么属性改为“user.name”,来和VO类形成完全一致的对应

数组

		//表单
	<form action="reg5.action" method="post">
		<input type="checkbox" name="item" value="苹果">苹果
		<input type="checkbox" name="item" value="香蕉">香蕉
		<input type="checkbox" name="item" value="梨子">梨子
		<input type="submit" value="登录">	
	</form>

	//测试类
	@RequestMapping("/reg5.action")
	public String reg5(String[] item) {
		
		for (String string : item) {
			System.out.println(string);
		}
		return "result";
	}
  • 这里的数组也很简单,就是一个单纯的赋值而已
  • 我们通过name属性的“item”然后参数接受一样定义成“String[] item”
  • 然后name属性和参数的名字一样,就形成了对应,已达到传值的效果

Map

//表单
<form action="reg8.action" method="post">
		<input type="text" name="name" value=""/>
		<input type="text" name="id" value=""/>
		<input type="checkbox" name="item" value="苹果">苹果
		<input type="checkbox" name="item" value="香蕉">香蕉
		<input type="checkbox" name="item" value="梨子">梨子
		<input type="submit" value="登录">		
	</form>

	//测试类
		@RequestMapping("/reg6.action")
	public String reg7(HttpServletRequest req,@RequestParam Map<String,String> map) {
	
		Map<String, String[]> maplList=req.getParameterMap();
		for(String str:maplList.keySet()) {
			for (String str1 : maplList.get(str)) {
				System.out.println(str+":"+str1);
			}
		}
		System.out.println(map.get("name"));
		System.out.println(map.get("id"));
		System.out.println(map.get("item"));
		return "result";
	}
  • 我们这里接受map使用了两种方法
  • 1.@RequestParam Map<String,String> map 通过注解接受
    • 我们通过注解接受的,获取值也相当方便,直接map.get(“XXX”)就可以获取值了
    • 但是需要注意,接受name属性值相同的时候,只会获取第一个值,后面的会丢失
  • 2.HttpServletRequest req 通过请求对象接受
    • 这里我们需要注意,使用对象接受的值不会丢失
    • 但是我们接受的类型是Map<String, String[]> ,所以我们需要两次遍历才能获取值

List

关于list的获取,最简单的方法如同前面的VO对象,吧name属性改为“user.name”一样,形成和对象属性的完全一致,但是这个方法有很多BUG,所以这里不再介绍

然而最好的方法是使用json对象接受,使用ajax发送异步请求,并且转换表单数据,这里我会在后面介绍

关于日期的一个转换

我们使用SpringMVC接受表单数据的时候,不能自动吧String转换为Date,所以我们需要手动转换

DateConverter
public class DateConverter implements Converter<String, Date>{

	@Override
	public Date convert(String arg0) {
		// TODO 自动生成的方法存根
		SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		try {
			return simpleDateFormat.parse(arg0);
		} catch (Exception e) {
			// TODO: handle exception
		}
		return null;
	}

}
Spring配置
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
			<property name="converters">
				<list>
					<bean class="Converter.DateConverter"></bean>
				</list>
			</property>
</bean>
<!--启用注解 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
  • 这里我们需要注意,我们输入只能输入如同1990-1-1这种格式的
  • 如果输入1990/1/1这样是获取不到值的哦,需要小心

猜你喜欢

转载自blog.csdn.net/qq_37871033/article/details/86775547
今日推荐