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对象中。如果未定义将默认用小写名称作为键。

  • 相关阅读:
    Custom.pll : ZOOM小测试
    在编写PL/SQL代码中使用SELECT语句时如何避免例外发生
    使用Custom.pll修改标准Form的LOV(转)
    WINCE 定时器0控制LED驱动源码
    WinCE文件目录定制
    printf输出格式
    WINCE 微秒、毫秒级延时函数
    WINCE远程注册表的使用
    CE开发中可能遇到的问题
    S3C2440 进行微秒级、毫秒级延时函数
  • 原文地址:https://www.cnblogs.com/MrSaver/p/6395684.html
Copyright © 2011-2022 走看看