Spring MVC 输出模型数据

Spring MVC 提供了以下几种途径输出模型数据(认情况:模型数据会自动保存到request域对象中):

  • ModelAndView: 处理方法返回值类型为ModelAndView 时, 方法体即可通过该对象添加模型数据
  • Map及Model: 入参为org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map 时,处理方法返回时,Map中的数据会自动添加到模型中。
  • @SessionAttributes: 将模型中的某个属性暂存到 HttpSession 中,以便多个请求之间可以共享这个属性
  • @ModelAttribute: 方法入参标注该注解后, 入参的对象就会放到数据模型中
    1. ModelAndView:在测试方法中创建ModelAndView返回

控制器处理方法的返回值如果为ModelAndView, 则其既包含视图信息,也包含模型数据信息。

  1. Index.jsp
<a href="springmvc/TestModelAndView">TestModelAndView</a></br>


  1. 测试方法
 		@RequestMapping("/TestModelAndView")
 		public ModelAndView testModelAndView() {
 			// 1.创建一个modelandview对象,提供一个视图的信息
 			// 因为ModelAndView 里面包含两部分信息:一个model,还有一个是view
 			ModelAndView mv = new ModelAndView("success");
 			// 2.是向modelAndView中添加模型数据,现在下面的数据会默认保存到requet域对象
 			mv.addObject("name", "xiaomi");
 			// 3.返回modelAndView
 			return mv;
 		}


 

  1. Success.jsp
request域    name的信息: ${requestScope.name}<br>


 

  1. Map:一般作为测试方法的入参
  • Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。
  • 如果方法的入参为Map或Model类型,Spring MVC会将隐含模型的引用传递给这些入参。在方法体内,开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据。
  1. Index.jsp
	<a href="springmvc/TestMap">TestMap</a></br>


  1. 测试方法
@RequestMapping("/TestMap")
 		public String testMap(Map<String, Object> map) {
 			// 如果方法 的入参是一个map对象,那么map对象中的模型数据会自动加入到request域对象中
 			map.put("gender", "女");
 			map.put("age", 19);
 			return success;
 		}


 

  1. Success.jsp
request域    gender的信息: ${requestScope.gender}<br>
	request域    age的信息: ${requestScope.age}<br>


 

 

  1. @SessionAttributes
  • 若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个@SessionAttributes,Spring MVC将在模型中对应的属性存到 HttpSession中。
  • @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中

@SessionAttributes(types=User.class) 会将隐含模型中所有类型为User.class 的属性添加到会话中。

@SessionAttributes(value={user1, “user2”}) 会将隐含模型中key类型为user1user2的属性添加到会话中。

@SessionAttributes(types={User.class,Dept.class})

@SessionAttributes(value={user1, “user2”},types={Dept.class})

Request域中也会有

  1. Index.jsp
<a href="springMVC2/TestSessionAttribute">TestSessionAttribute</a></br>


 

  1. 测试方法
	@RequestMapping("/TestSessionAttribute")
	public String testSessionAttribute(Map<String, Object> map) {
		User user = new User();
		user.setUsername("小米");
		user.setAge(18);
		user.setPassword("123123");
		// map中的数据会默认添加request域对象中
		map.put("user", user);
		return SUCCESS;
	}


  1. 测试类class上添加@SessionAttributes
@SessionAttributes(value={"user"}, types={String.class})
@RequestMapping("/springmvc")
@Controller
public class SpringMVCTest{}

注意:@SessionAttributes只能够添加在类上,不能添加在方法上


  1. Success.jsp
request域    name的信息: ${requestScope.name}<br>
	request域    gender的信息: ${requestScope.gender}<br>
	request域    age的信息: ${requestScope.age}<br>
	
	request域  user的数据:${requestScope.user}</br>
	session域  user的数据:${sessionScope.user}</br>


 

  1. ModelAttribute

Spring MVC在调用目标处理方法前,会先逐个调用在方法上标注了@ModelAttribute 的方法。

 

ModelAttribute的作用:

  • 放在功能处理方法(指用@ModelAttribute修饰的方法),用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;
    1. Index.jsp
<a href="springMVC2/TestSessionAttribute">TestSessionAttribute</a></br>
	
	<a href="springMVC2/updateUser?id=1">updateUser</a></br>
	<a href="springMVC2/deleteUser?id=1">deleteUser</a></br>


 

  1. 测试类
@RequestMapping("/TestSessionAttribute")
	public String testSessionAttribute(Map<String, Object> map) {
		User user = new User();
		user.setUsername("张三");
		user.setAge(17);
		user.setPassword("123");
		// map中的数据会默认添加request域对象中
		map.put("user", user);
		return SUCCESS;
	}

	@RequestMapping("/testUser")
	public String testUser(User user){
		System.out.println(user);
		return SUCCESS;
	}
	
	//更新用户
	@RequestMapping("/updateUser")
	public String updateUser(Integer id,User user) {
		System.out.println(user);
		// 找到了这个用户,就模拟更新了
		user.setUsername("赵薇");
		System.out.println("更新了该用户");

		return SUCCESS;
	}

	//删除用户
	@RequestMapping("/deleteUser")
	public String deleteUser(Integer id,User user) {
		System.out.println(user);
		// 找到了这个用户,就模拟删除了
		System.out.println("删除了该用户");

		return SUCCESS;
	}

代码执行流程:

1. 执行 @ModelAttribute 注解修饰的方法: 从数据库中取出对象, 把对象放入到了 Map 中. 键为: user

2. SpringMVC 从 Map 中取出 User 对象, 并把表单的请求参数赋给该 User 对象的对应属性.

3. SpringMVC 把上述对象传入目标方法的参数.

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值