Spring MVC(三) 参数传递-1 Controller到View的参数传递

时间:2024-05-11 08:20:35

        在Spring MVC中,把值从Controller传递到View共有5中操作方法,分别是。

  1. 使用HttpServletRequest或HttpSession。
  2. 使用ModelAndView。
  3. 使用Map集合
  4. 使用Model
  5. 使用ModelMap

        使用HttpServletRequest或HttpSession传值

        使用HttpServletRequest或HttpSession传值,和Servlet传值方式是一致的,因此应用的不是太多。在学习Servlet的时候,用户登录等情况下,是要把当前登录的用户对象保存在HttpSession中的,这是为数不多的几个应用之一。具体使用HttpServletRequest或者HttpSession的操作代码如下。

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * 用户模块控制器
 */
@Controller
@RequestMapping("/user")
public class UserController {
	@RequestMapping(value="/list", method=RequestMethod.GET)
	public String list(HttpServletRequest req, HttpSession session) {
		req.setAttribute("test1", "测试数据1");
		session.setAttribute("test2", "测试数据2");
		return "user/list";
	}
}

        使用HttpServletRequest或者HttpSession传值,只需要把HttpServletRequest对象和HttpSession对象当做参数传到方法中就可以直接使用了。

        在页面中取值的时候就可以使用EL表达式,通过${test1 }和${test2 },获取到相应的数据。

        使用ModelAndView传值

        在本章一开始简单使用了一次,不过没有传值,使用ModelAndView传值具体的操作为。

@RequestMapping(value="/modelAndView", method=RequestMethod.GET)
public ModelAndView testModelAndView() {
	Map<String, String> data = new HashMap<String, String>();
	data.put("test", "测试数据");
	return new ModelAndView("user/modelAndView", data);
}

        在页面modelAndView.jsp中取值,同样可以采用EL表达式取值。使用ModelAndView传值需要借助于集合,因此在具体的开发中基本不会用到,在此只做简单的了解。

        使用Map集合传值

        在使用Map集合传值的时候,只需要把一个Map对象当做方法的参数就可以使用了,具体的操作为。

@RequestMapping(value="/map", method=RequestMethod.GET)
public String testMap(Map<String, Object> data) {
	data.put("test", "测试数据");
	return "user/map";
}

        在页面中map.jsp中取值,同样采用EL表达式${test }取值。

        使用Model传值

        Model是一个接口,在具体的操作中,也是把Model对象当做方法的参数,具体的操作为。

@RequestMapping(value="/model", method=RequestMethod.GET)
public String testModel(Model model) {
	model.addAttribute("test", "测试数据");
	return "user/model";
}

        在页面中map.jsp中取值,同样采用EL表达式${test }取值。Model的addAttribute方法还有另外的一个重载,如下所示。

@RequestMapping(value="/model", method=RequestMethod.GET)
public String testModel(Model model) {
	model.addAttribute("测试数据");
	return "user/model";
}

        在页面map.jsp中取值,是采用EL表达式${string }来取值,因为,使用model.addAtttribute(data)直接传值,没有指定其key值,默认的key值是数据的类型(首字母变成小写)。这种方法主要是应用在添加一个对象,只需要把一个对象传入到方法中,默认的key值就是该对象的类型。

        使用ModelMap传值

        提起ModelMap,我们就可以大致觉得这是Model和Map的组合,其实也基本差不多。不过ModelMap并没有实现Model接口,只是继承了LinkedHashMap,而LinkedHashMap继承自HashMap。ModelMap具有Model和Map相同的操作,不过在具体的开发中使用的也不是太多。

        总结

        虽然参数从Controller传递到View有5中不同的操作方法,但是在具体的使用上一般只会采用其中的Model和Map进行传值,大家具体使用哪一种方法,要看具体的操作,本书在接下来的章节中全部采用Model进行传值。