【SpringMVC】 模型数据

来源:互联网 发布:迷你led显示屏软件 编辑:程序博客网 时间:2024/06/05 04:17

       上篇文章实现了springmvc的一个小的示例,在这个实例中我们做到了去接受服务端的请求。今天我们就来看一下如何去返回数据,并显示到页面上。

       springMVC提供了如下几种途径输出模型数据。    


一、ModelAndView

        如果Controller中方法返回值为该对象,我们就可以通过该对象添加数据和视图。该对象有很多的构造函数和方法,但是这些方法都是大同小异。总的来说还是去添加视图和数据。我们看一个例子。

        

@RequestMapping("/modelAndView")public ModelAndView hello2(){   Person p=new Person();   p.setName("jack");   p.setAge(26);   ModelAndView modelAndView=new ModelAndView();   modelAndView.addObject("p",p);   modelAndView.setViewName("hello");   return modelAndView;}

<body>   姓名:<span>${p.name}</span>   <br />   年龄:<span>${p.age}</span></body>


二、Map或者Model

        该对象放到了方法中的入参中。如果方法的入参使用了该对象,SpringMVC会将隐含模型的引用传递给这些入参。在方法体内,我们可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的数据属性。

       来一个例子

@RequestMapping("/map")public String hello3(Map<String,Object> map){     Person p=new Person();     p.setName("andy");     p.setAge(27);     map.put("p",p);     return "hello";}

三、@SessionAttribute

       如果我们希望在多个请求直接共用一个模型属性数据,那么我们就可以在控制器的类上使用该注解,SpringMVC将在模型中对应的属性暂存到HttpSession中。

       @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中

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

       –@SessionAttributes(value={“user1”, “user2”})

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

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


@Controller@SessionAttributespublic class HelloWorld {@RequestMapping("/SessionAttributes")public ModelAndView hello4(){      ModelAndView modelAndView=new ModelAndView();      modelAndView.setViewName("hello");      Person p=new Person();      p.setName("Attributes_Li");      p.setAge(18);      modelAndView.addObject("p",p);      return modelAndView;      }         }

 

四、@ModelAttribute

       该注解有两种使用的方式,可以用在方法上也可以用在方法参数上。

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

       在方法上加入注解也会有两种方式,当没有返回值时,我们就需要向该注解标识的方法中传递一个Model或者Map类型的参数来作为存储模型数据的容器

@ModelAttribute  public void getName(Map<String, Object> map) {        map.put("name", "jack");  }

       当有返回值时,模型数据是被存储到SpringMVC为我们创建的隐式容器中。而

        

@ModelAttribute  public Person getPerson(){     Person person = new Person();     person.setName("jack");     person.setAge(24);     return person;  }  

       默认的属性名是非限定类型名称的第一个字母小写后作为属性名,如果不想使用默认的则可以使用@ModelAttribute注解中的value属性来指定属性名。这时我们的注解就要放到方法入参中了。

      

@RequestMapping("/ModelAttribute1")public ModelAndView hello5(@ModelAttribute("user") Person){   ModelAndView modelAndView=new ModelAndView();   modelAndView.setViewName("hello");   return modelAndView;}

       以上就是关于几种途径输出模型数据的方式。总结完了收获还是蛮大的。

原创粉丝点击