zoukankan      html  css  js  c++  java
  • SpringMVC:学习笔记(4)——处理模型数据

    SpringMVC—处理模型数据

    说明

      SpringMVC 提供了以下几种途径输出模型数据:
      – ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据
      – Map及Model:入参为org.springframework.ui.Model、org.springframework.ui.ModelMap 或 Java.uti.Map 时,处理方法返回时,Map中的数据会自动添加到模型中。
      – @SessionAttributes: 将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性
      – @ModelAttribute: 方法入参标注该注解后, 入参的对象就会放到数据模型中。

    ModelAndView

    说明

      一旦Controller处理完客户请求,则返回ModelAndView对象给DispatcherServlet前端控制器。ModelAndView中包含了模型(Model)和视图(View)。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观角度考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型和视图。
      即,控制器处理方法的返回值如果为ModelAndView,则其中既包含视图信息,也包含模型数据信息

    示例

      1.创建ModelAndView,并传入模型数据  

      

      2.编写JSP页面,进行测试

      

    说明:SpringMVC会把ModelAndView中的Model中的数据方法Request域对象中。 

    Map及Model

    说明: 

      Spring MVC 在内部使用了一个org.springframework.ui.Model 接口存储模型数据。

      Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。

      如果方法的入参为 Map 或 Model 类型,Spring MVC 会将隐含模型的引用传递给这些入参在方法体内,开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据。

    示例:

      

    使用MODEL:

      这里传入的Map实际为BindingAwareModelMap,所以我们定义参数用Map即可。  

       

    说明:

      并且在这里我们也是可以使用Model类型的。
      

    @SessionAttribute

      若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个 @SessionAttributes,Spring MVC将在模型中对应的属性暂存到 HttpSession 中。

     说明:

        注意这个注解只能放到类的上面

      1.首先使用Map将模型数据存到请求域中,然后在类定义处使用@SessionAttributes,拷贝到Session中。

      

      2.编写JSP页面及测试

      

      

    补充

      @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中
      – @SessionAttributes(types=User.class) 会将隐含模型中所有类型为 User.class 的属性添加到会话中。
      – @SessionAttributes(value={“user1”, “user2”})
      – @SessionAttributes(types={User.class, Dept.class})
      – @SessionAttributes(value={“user1”, “user2”},types={Dept.class})

    @ModelAttribute

    说明:

      前面谈到SpringMVC在每次调用请求处理方法时,都会创建Model类型的一个实例。如果准备使用此实例,则可以在方法中添加一个Model类型的参数。还可以使用在方法中添加@ModelAttribute注释类型来访问Model实例

      可以用@ModelAttribute来注释方法参数:带有@ModelAttribute注解的方法会将其输入或创建的参数对象添加到Model对象中(若方法中没有显式添加)。

      可以用@ModelAttribute标注一个非请求的处理方法:被@ModelAttribute注释的方法会在此controller每个方法执行前被执行。  

    基本用法:

      1.在方法上使用@ModelAttribute

      @Controller
      public class UserDao{
        .....
        @ModelAttribute
        public User addUser(User user)
        {
            return new User(201702,"MrSaber");
        }
        .....
      }

    说明:

     @ModelAttribute 注解的方法可以返回一个 对象或者一个void类型。如果返回一个对象则默认添加到Model中。若方法返回一个void类型,则还必须自行将实例添加到Model中。

      @Controller
      public class UserDao{
        .....
        @ModelAttribute
        public void addUser(User user,Model model)
        {
                  ...
            model.addAttribute(user);
        }
        .....
      }    

      2.在方法参数上使用@ModelAttribute.

    @RequestMapping("/save")  
    public String save(@ModelAttribute("newUser") User user) {  
        user.setUsername("U love me");  
        userService.save(user);  
        return "result";  
    } 

    说明:

       输入或创建的User实例将用newUser键值添加到Model对象中。如果未定义将默认用小写名称作为键。

  • 相关阅读:
    Kinect 开发 —— 硬件设备解剖
    Kinect 开发 —— 引言
    (转)OpenCV 基本知识框架
    OpenCV —— 摄像机模型与标定
    OpenCV —— 跟踪与运动
    OpenCV —— 图像局部与分割(二)
    OpenCV —— 图像局部与部分分割(一)
    OpenCV —— 轮廓
    OpenCV —— 直方图与匹配
    OpenCV —— 图像变换
  • 原文地址:https://www.cnblogs.com/MrSaver/p/6395684.html
Copyright © 2011-2022 走看看