文章目录
SpringMVC处理响应数据
几种途径输出模型数据:
Map
Model
ModelMap
MadelAndView
1. Map 和 Model 以及 ModelMap
SpringMVC除过在方法上传入原生的request和session外还能怎么样把数据带给页面呢?
可以在方法处
传入Map、或者Model或者ModelMap
。给这些参数里面保存的所有数据都会放在请求域中。这样就可以在页面获取了
/*
* Map,Model,ModelMap:最终都是BindingAwareModelMap在工作;
* 相当于给BindingAwareModelMap中保存的东西都会被放在请求域中;
*
* Map(interface(jdk)) Model(interface(spring))
* || //
* || //
* \/ //
* ModelMap(class) //
* \\ //
* \\ //
* ExtendedModelMap
* ||
* \/
* BindingAwareModelMap
*/
Map
success.jsp页面能拿到username的值 taoge
@RequestMapping("/testMap")
public String testMap(Map map){
map.put( "username","taoge" );
return "success";
}
Model
success.jsp页面能拿到username的值 huige
addAttribute
@RequestMapping("/testModel")
public String testModel(Model model){
/**
* model = class org.springframework.validation.support.BindingAwareModelMap
* model = org.springframework.validation.support.BindingAwareModelMap
* */
System.out.println( "model = " + model.getClass() );
System.out.println( "model = " + model.getClass().getName() );
model.addAttribute( "username","huige" );
return "success";
}
ModelMap
addAttribute
@RequestMapping("/testModelMap")
public String testModelMap(ModelMap modelMap){
modelMap.addAttribute("msg", "你好棒!");
System.out.println("modelmap的类型:"+modelMap.getClass());
return "success";
}
2. ModelAndView对象
控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息,而且数据是放在请求域中
两个重要的成员变量:
private Object view; 视图信息
private ModelMap model; 模型数据
添加模型数据:
- MoelAndView addObject(String attributeName, Object attributeValue) 设置模型数据
- ModelAndView addAllObject(Map<String, ?> modelMap)
设置视图:
- void **setView(**View view) 设置视图对象
- void setViewName(String viewName) 设置视图名字
获取模型数据
protected Map<String, Object> getModelInternal() 获取模型数据
public ModelMap getModelMap()
public Map<String, Object> getModel()
/*
* ModelAndView对象一共就两个属性需要研究
* //View instance or view name String
* private Object view ;
*
* //Model Map
* private ModelMap model;
*
* ModelAndView中的方法:
* */
@RequestMapping("/user")
public ModelAndView testModelAndView(){
//创建一个模型视图对象
ModelAndView mv = new ModelAndView();
//设置模型
mv.addObject( "username","taoge" ); //实质上存放到request域中
//设置视图名称
mv.setViewName( "success" );
return mv;
}
3. SpringMVC中的重定向和转发
关于重定向和转发
一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理,即经过视图解析器处理。
如果返回的字符串中带 forward: 或 redirect: 前缀时,SpringMVC 会对他们进行特殊处理:将 forward: 和 redirect: 当成指示符,其后的字符串作为 URL 来处理
- redirect:success.jsp:会完成一个到 success.jsp 的重定向的操作
- forward:success.jsp:会完成一个到 success.jsp 的转发操作
@RequestMapping("/testRedirect")
public String testRedirect(Model model){
model.addAttribute( "username","weige" );
//转发 request
return "forward:/WEB-INF/views/ok.jsp";
//重定向
//return "redirect:/index.jsp";
}