标签:add ros mvc 图片 value 属性 spl manager oid
1.SpringMVC处理模型数据 : 主要解决如何把模型数据放到域对象中
但是对于开发者需要掌握:如何把数据放入到模型对象(ImplictModel)中进而供视图页面展示使用
?把握一个基本点:一次请求会产生一个隐式模型容器(ImplictModel),隐含模型中的所有数据最终将通过HttpServletRequest的属性列表暴露给JSP
视图对象
当前端请求过来后,需要从两个方面入手:
①、前端请求参数的解析,以及如何传入处理器方法的入参
②、处理器内部产生的模型数据如何传递到前端页面
2.Spring提供了4种途径处理输出模型数据
①ModelAndView : 当处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据(key-value类型 ------>这个就是模型数据),在前端页面可用el表达式通过key 取出数据,也可以从request中取数据,源码会将数据放到请求域中。
②Map及Model、ModelMap:源码还是会放到请求域中 --------->Spring MVC在调用方法前会创建一个ImplictModel(隐式模型)作为模型数据的存储容器,方法入参为Map之类,会将隐式模型的引用
传递给这些入参。
③@SessionAttributes:将模型中的某个属性暂存到HttpSession中
④@ModelAttribute:需要详解
3.@ModelAttribute开始详解:
@ModelAttribute最主要的作用是将数据添加到模型对象中,用于视图页面展示时使用。
@ModelAttribute等价于 model.addAttribute("attributeName", abc); 但是根据@ModelAttribute注释的位置不同,和其他注解组合使用,致使含义有所不同。
1.@ModelAttribute 注释方法 ------>调用 @ModelAttribute 注解修饰的方法. 实际上把 @ModelAttribute 方法中 Map 中的数据放在了 implicitModel 中.
①@ModelAttribute注释void返回值的方法
被@ModelAttribute注释的方法会在此controller每个方法执行前被执行,因此对于一个controller映射多个URL的用法来说,要谨慎使用。
@Controller
public class HelloWorldController {
@ModelAttribute
public void populateModel(@RequestParam String abc, Model model) {
model.addAttribute("attributeName", abc);
}
@RequestMapping(value = "/helloWorld")
public String helloWorld() {
return "helloWorld";
}
}
这个例子,在获得请求/helloWorld 后,populateModel方法在helloWorld方法之前先被调用,它把请求参数(/helloWorld?abc=text)加入到一个名为attributeName的model属性中,在它执行后 helloWorld被调用。在注释方法内部完成 model.addAttribute("attributeName", abc);
②@ModelAttribute注释返回具体类的方法
@ModelAttribute
public Account addAccount(@RequestParam String number) {
return accountManager.findAccount(number);
}
这种情况,model属性的名称没有指定,它由返回类型隐含表示,如这个方法返回Account类型,那么这个model属性的名称是account。这个例子中model属性名称有返回对象类型隐含表示,model属性对象就是方法的返回值。它无须要特定的参数。 隐式完成 model.addAttribute("account",accountManager.findAccount(number))
③@ModelAttribute(value="")注释返回具体值的方法
@Controller
public class HelloWorldController {
@ModelAttribute("attributeName")
public String addAccount(@RequestParam String abc) {
return abc;
}
这个例子中使用@ModelAttribute注释的value属性,来指定model属性的名称。model属性对象就是方法的返回值。它无须要特定的参数。
隐式完成 model.addAttribute("attributeName",abc(变量的值))
④@ModelAttribute和@RequestMapping同时注释一个方法
@Controller
public class HelloWorldController {
@RequestMapping(value = "/helloWorld.do")
@ModelAttribute("attributeName")
public String helloWorld() {
return "hi";
}
}
这时这个方法的返回值并不是表示一个视图名称,而是model属性的值,视图名称由RequestToViewNameTranslator根据请求"/helloWorld.do"转换为逻辑视图helloWorld。
隐式完成 model.addAttribute("attributeName","hi")
2.@ModelAttribute 注释方法入参
从这里就需要考虑之前一个问题:前端请求参数的解析,如何传入处理器方法的入参,SpringMVC 确定目标方法 POJO 类型入参(这个就囊括了常规的需求)
@ModelAttribute详解
标签:add ros mvc 图片 value 属性 spl manager oid
原文地址:https://www.cnblogs.com/bigdatalearn/p/6c1cabd5c64bf43d8dcc303e07d1fe8b.html