利用springmvc处理模型数据

springmvc处理模型数据

很多情况下页面上需要很多数据,单单返回页面是不行的,那么springmvc如何将数据返回到该页面呢

springmvc提供了四种方式来输出模型数据

  • ModelAndView: 处理返回值为ModelAndView时,可以将该对象中添加数据模型
  • Map及Model:入参为Model、ModelMap或Map时,处理方法返回时,Map中的数据会自动添加到模型中
  • @SessionAttributes: 将模型中的某个属性暂存到HttpSession中,以便多个请求之间共享数据
  • @ModelAttribute: 方法入参标注该注解后,入参的对象就会放到数据模型中

ModelAndView

主要有两个重要的变量

// 视图 可以传字符串(视图名字)也可以传View对象

private Object view;

// 数据模型 本质是一个map

private ModelMap model;

视图相关的方法

// 设置视图

public void setViewName(String viewName) {

this.view = viewName;

}

// 获取视图

public String getViewName() {

return this.view instanceof String ? (String)this.view : null;

}

数据模型相关方法

// 获取数据模型

protected Map<String, Object> getModelInternal() {

return this.model;

}

public ModelMap getModelMap() {

if (this.model == null) {

this.model = new ModelMap();

}

return this.model;

}

public Map<String, Object> getModel() {

return this.getModelMap();

}

// 添加视图模型

public ModelAndView addObject(String attributeName, Object attributeValue) {

this.getModelMap().addAttribute(attributeName, attributeValue);

return this;

}

springmvc底层使用request.setAttribute(name,value)来将数据放入到请求中

示例:

@RequestMapping("/modelAndViewTest")

public ModelAndView modelAndViewTest(){

// 视图名

ModelAndView modelAndView = new ModelAndView("modelAndViewTest");

// 包含的数据

modelAndView.addObject("dateTime",new Date());

return modelAndView;

}

Map及Model

@RequestMapping("/mapTest")

public String mapTest(Map<String,String> map){

System.out.println(map.getClass()); //class org.springframework.validation.support.BindingAwareModelMap

map.put("name","张三");

return "hello";

}

@SessionAttributes

在类上添加@SessionAttributes可以使该类所代表的路径下的session共享

@Controller

@RequestMapping("helloWorld")

// 设置name属性共享

@SessionAttributes(value={"name"})

public class HelloWorldController {

@RequestMapping("/mapTest")

public String mapTest(Map<String,String> map){

System.out.println(map.getClass()); //class org.springframework.validation.support.BindingAwareModelMap

map.put("name","张三");

return "hello";

}

// 可以在该方法中获取到name值为张三

@RequestMapping("/sessionAttributes")

public String sessionAttributes(HttpSession session){

System.out.println(session.getAttribute("name"));

return "hello";

}

}

@ModelAttribute

用在无返回值的方法

package com.yiidian.controller;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

@Controller

public class ModelAttributeController {

//没有返回值的情况

@ModelAttribute

public void myModel(@RequestParam(required = false) String name, Model model) {

model.addAttribute("name", name);

}

@RequestMapping(value = "/model")

public String model() {

return "success";

}

}

用在带返回值的方法

package com.yiidian.controller;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

@Controller

public class ModelAttributeController {

/**

* 带返回值的情况

* @param name

*/

@ModelAttribute("name")

public String myModel(@RequestParam(required = false) String name) {

return name;

}

@RequestMapping(value = "/model")

public String model() {

return "success";

}

}

应用在方法的参数上

@ModelAttribute("name")

public String myModel(@RequestParam(required = false) String name) {

return name;

}

//应用在方法的参数行

@RequestMapping(value = "/model")

public String model(@ModelAttribute("name") String name) {

System.out.println("name="+name);

return "success";

}

以上是 利用springmvc处理模型数据 的全部内容, 来源链接: utcz.com/z/322924.html

回到顶部