2018/1/7
SpringMVC是一个以模型数据为核心的开源框架,将前后端松耦合的管理,最重要的就是数据的传递。
下面给大家介绍的是把参数值传递,包括使用简单类型数据、ModelAndView、Model 、POJO 以及 Map。
一、(View to Conotroller) URL传值--@RequestMapping
【1】修改IndexController.java:
1package com.smbms.controller; 2 3import org.apache.log4j.Logger; 4import org.apache.log4j.PropertyConfigurator; 5import org.springframework.stereotype.Controller; 6import org.springframework.web.bind.annotation.RequestMapping; 7import org.springframework.web.bind.annotation.RequestMethod; 8import org.springframework.web.bind.annotation.RequestParam; 9import org.springframework.web.servlet.ModelAndView; 10 11@Controller 12@RequestMapping("/a") 13public class IndexController { 14 private Logger log = Logger.getLogger(IndexController.class.getName()); 15 16 @RequestMapping(value="/hello",method=RequestMethod.POST,params="username") 17 public String hello(@RequestParam String username){ 18 log.info("welcome username1 ,"+username); 19 return "hello"; 20 } 21 22}
【2】在index.html 修改:
1<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 2 pageEncoding="ISO-8859-1"%> 3<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4<html> 5<head> 6<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 7<title>Insert title here</title> 8</head> 9<body> 10 <a href="http://www.baidu.com">click</a> 11 <a href="https://my.oschina.net//u/4689327/blog/4663859/hello?username=mmb">hello</a> 12</body> 13</html>
解释:(1)@RequestMapping 负责将不同的请求映射到对应的控制器方法上;
(2)@RequestMapping 的请求信息必须保持全局唯一,处理修饰方法,也可以修饰类;
(3)@RequestMapping 除了URL 映射请求,还可以使用请求参数、请求方法来映射请求,多条件可以让请求更加精确,匹配顺序为:首先value,然后method,最后参数;
输出结果:
18/01/07 11:08:17 INFO controller.IndexController: welcome username ,mmb
二、(View to Conotroller) URL传值--@RequestParam
【1】修改IndexController.java:
1package com.smbms.controller; 2 3import org.apache.log4j.Logger; 4import org.apache.log4j.PropertyConfigurator; 5import org.springframework.stereotype.Controller; 6import org.springframework.web.bind.annotation.RequestMapping; 7import org.springframework.web.bind.annotation.RequestMethod; 8import org.springframework.web.bind.annotation.RequestParam; 9import org.springframework.web.servlet.ModelAndView; 10 11@Controller 12@RequestMapping("/a") 13public class IndexController { 14 private Logger log = Logger.getLogger(IndexController.class.getName()); 15 16 //@RequestParam 17 @RequestMapping(value="/hello") 18 public String hello2(@RequestParam(value="username" ,required=false) String username){ 19 log.info("welcome username2 ,"+username); 20 return "hello"; 21 } 22}
【2】输出结果:
18/01/07 11:12:46 INFO controller.IndexController: welcome username2 ,mmb
解释:(1)@RequestParam 注解指定对应的请求参数。@RequestParam 有以三个参数:value(参数名)、required(参数是否必须)、defaultValue(不推荐);
三、(Conotroller to View )
对于mvc,模型数据最重要,Controller产生了Model,View最终也是为了渲染模型数据并进行输出:
1、ModelAndView
既包含视图信息,也包含模型数据。IndexController.java 做修改,将前端URL传参,在控制台输出参数值,并在视图层输出username;
【1】IndexController.java:
1package com.smbms.controller; 2 3import org.apache.log4j.Logger; 4import org.apache.log4j.PropertyConfigurator; 5import org.springframework.stereotype.Controller; 6import org.springframework.web.bind.annotation.RequestMapping; 7import org.springframework.web.bind.annotation.RequestMethod; 8import org.springframework.web.bind.annotation.RequestParam; 9import org.springframework.web.servlet.ModelAndView; 10 11@Controller 12@RequestMapping("/a") 13public class IndexController { 14 private Logger log = Logger.getLogger(IndexController.class.getName()); 15 16 //ModelAndView 17 @RequestMapping(value="/hello") 18 public ModelAndView hello3(@RequestParam(value="username3" ,required=true) String username3){ 19 log.info("welcome username3 ,"+username3); 20 ModelAndView mView = new ModelAndView(); 21 mView.addObject("username",username3); 22 mView.setViewName("hello"); 23 return mView; 24 } 25}
【2】在index.html 修改:
1<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 2 pageEncoding="ISO-8859-1"%> 3<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4<html> 5<head> 6<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 7<title>Insert title here</title> 8</head> 9<body> 10 <a href="http://www.baidu.com">click</a> 11 <a href="https://my.oschina.net//u/4689327/blog/4663859/hello?username=mmb">hello-username</a> 12 <a href="https://my.oschina.net//u/4689327/blog/4663859/hello?usernameA=mmb">hello-usernameA</a> 13</body> 14</html>
【3】输出结果:
18/01/07 11:29:24 INFO controller.IndexController: welcome usernameA ,mmb

解释:(1)ModelAndView 对象介绍(官方文档):
org.springframework.web.servlet
Class ModelAndView
1java.lang.Object 2 org.springframework.web.servlet.ModelAndView
1public class ModelAndView 2 3 extends 4 Object
Constructor Summary
**[ModelAndView](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#ModelAndView%28%29)**()
Default constructor for bean-style usage: populating bean properties instead of passing in constructor arguments.
**[ModelAndView](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#ModelAndView%28java.lang.String%29)**([String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue) viewName)
Convenient constructor when there is no model data to expose.
**[ModelAndView](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#ModelAndView%28java.lang.String,%20java.util.Map%29)**([String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue) viewName, [Map](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Futil%2FMap.html%3Fis-external%3Dtrue)<[String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue),?> model)
Creates new ModelAndView given a view name and a model.
**[ModelAndView](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#ModelAndView%28java.lang.String,%20java.lang.String,%20java.lang.Object%29)**([String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue) viewName, [String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue) modelName, [Object](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue) modelObject)
Convenient constructor to take a single model object.
**[ModelAndView](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#ModelAndView%28org.springframework.web.servlet.View%29)**([View](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/View.html) view)
Convenient constructor when there is no model data to expose.
**[ModelAndView](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#ModelAndView%28org.springframework.web.servlet.View,%20java.util.Map%29)**([View](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/View.html) view, [Map](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Futil%2FMap.html%3Fis-external%3Dtrue)<[String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue),?> model)
Creates new ModelAndView given a View object and a model.
**[ModelAndView](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#ModelAndView%28org.springframework.web.servlet.View,%20java.lang.String,%20java.lang.Object%29)**([View](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/View.html) view, [String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue) modelName, [Object](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue) modelObject)
Convenient constructor to take a single model object.
Method Summary
[ModelAndView](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html)
**[addAllObjects](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#addAllObjects%28java.util.Map%29)**([Map](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Futil%2FMap.html%3Fis-external%3Dtrue)<[String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue),?> modelMap)
Add all attributes contained in the provided Map to the model.
[ModelAndView](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html)
**[addObject](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#addObject%28java.lang.Object%29)**([Object](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue) attributeValue)
Add an attribute to the model using parameter name generation.
[ModelAndView](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html)
**[addObject](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#addObject%28java.lang.String,%20java.lang.Object%29)**([String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue) attributeName, [Object](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue) attributeValue)
Add an attribute to the model.
void
**[clear](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#clear%28%29)**()
Clear the state of this ModelAndView object.
[Map](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Futil%2FMap.html%3Fis-external%3Dtrue)<[String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue),[Object](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue)>
**[getModel](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#getModel%28%29)**()
Return the model map.
protected [Map](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Futil%2FMap.html%3Fis-external%3Dtrue)<[String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue),[Object](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue)>
**[getModelInternal](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#getModelInternal%28%29)**()
Return the model map.
[ModelMap](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/ui/ModelMap.html)
**[getModelMap](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#getModelMap%28%29)**()
Return the underlying ModelMap instance (never null).
[View](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/View.html)
**[getView](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#getView%28%29)**()
Return the View object, or null if we are using a view name to be resolved by the DispatcherServlet via a ViewResolver.
[String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue)
**[getViewName](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#getViewName%28%29)**()
Return the view name to be resolved by the DispatcherServlet via a ViewResolver, or null if we are using a View object.
boolean
**[hasView](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#hasView%28%29)**()
Indicate whether or not this ModelAndView has a view, either as a view name or as a direct View instance.
boolean
**[isEmpty](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#isEmpty%28%29)**()
Return whether this ModelAndView object is empty, i.e.
boolean
**[isReference](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#isReference%28%29)**()
Return whether we use a view reference, i.e.
void
**[setView](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#setView%28org.springframework.web.servlet.View%29)**([View](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/View.html) view)
Set a View object for this ModelAndView.
void
**[setViewName](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#setViewName%28java.lang.String%29)**([String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue) viewName)
Set a view name for this ModelAndView, to be resolved by the DispatcherServlet via a ViewResolver.
[String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue)
**[toString](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#toString%28%29)**()
Return diagnostic information about this model and view.
boolean
**[wasCleared](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/web/servlet/ModelAndView.html#wasCleared%28%29)**()
Return whether this ModelAndView object is empty as a result of a call to clear() i.e.
Methods inherited from class java.lang.Object
[clone](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue%23clone%2528%2529), [equals](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue%23equals%2528java.lang.Object%2529), [finalize](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue%23finalize%2528%2529), [getClass](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue%23getClass%2528%2529), [hashCode](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue%23hashCode%2528%2529), [notify](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue%23notify%2528%2529), [notifyAll](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue%23notifyAll%2528%2529), [wait](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue%23wait%2528%2529), [wait](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue%23wait%2528long%2529), [wait](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue%23wait%2528long%2C%2520int%2529)
2、Model 对象模型的使用
还可以使用Model对象完成模型数据的传递。
【1】修改IndexController.java:
1package com.smbms.controller; 2 3import org.apache.log4j.Logger; 4import org.apache.log4j.PropertyConfigurator; 5import org.springframework.stereotype.Controller; 6import org.springframework.ui.Model; 7import org.springframework.web.bind.annotation.RequestMapping; 8import org.springframework.web.bind.annotation.RequestParam; 9import org.springframework.web.servlet.ModelAndView; 10 11@Controller 12@RequestMapping("/a") 13public class IndexController { 14 private Logger log = Logger.getLogger(IndexController.class.getName()); 15 16 //Model 17 @RequestMapping(value="/helloB") 18 public String hello4(String usernameB ,Model model){ 19 log.info("welcome usernameB ,"+usernameB); 20 model.addAttribute("usernameB",usernameB); 21 return "helloB"; 22 } 23}
【2】在index.jsp 修改:
1<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 2 pageEncoding="ISO-8859-1"%> 3<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4<html> 5<head> 6<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 7<title>Insert title here</title> 8</head> 9<body> 10 <a href="http://www.baidu.com">click</a> 11 <a href="https://my.oschina.net//u/4689327/blog/4663859/hello?username=mmb">hello-username</a> 12 <a href="https://my.oschina.net//u/4689327/blog/4663859/hello?usernameA=mmb">hello-usernameA</a> 13 <a href="https://my.oschina.net//u/4689327/blog/4663859/hello?usernameB=mmb">hello-usernameB</a> 14</body> 15</html>
【3】helloB.jsp:
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4<html> 5<head> 6<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7<title>Insert title here</title> 8</head> 9<body> 10 <h1>bb</h1> 11 <!-- ${usernameB}才是取值 --> 12 <h1>usernameB(key:usernameB) --> ${usernameB}</h1> 13</body> 14</html>
【4】输出结果:
18/01/07 11:52:33 INFO controller.IndexController: welcome usernameB ,mmb

解释:(1)Model对象介绍(官方文档):
org.springframework.ui
Interface Model
All Known Subinterfaces:
All Known Implementing Classes:
BindingAwareModelMap, ExtendedModelMap, RedirectAttributesModelMap
public interface Model
Method Summary
[Model](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/ui/Model.html)
**[addAllAttributes](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/ui/Model.html#addAllAttributes%28java.util.Collection%29)**([Collection](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Futil%2FCollection.html%3Fis-external%3Dtrue)<?> attributeValues)
Copy all attributes in the supplied Collection into this Map, using attribute name generation for each element.
[Model](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/ui/Model.html)
**[addAllAttributes](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/ui/Model.html#addAllAttributes%28java.util.Map%29)**([Map](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Futil%2FMap.html%3Fis-external%3Dtrue)<[String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue),?> attributes)
Copy all attributes in the supplied Map into this Map.
[Model](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/ui/Model.html)
**[addAttribute](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/ui/Model.html#addAttribute%28java.lang.Object%29)**([Object](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue) attributeValue)
Add the supplied attribute to this Map using a generated name.
[Model](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/ui/Model.html)
**[addAttribute](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/ui/Model.html#addAttribute%28java.lang.String,%20java.lang.Object%29)**([String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue) attributeName, [Object](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue) attributeValue)
Add the supplied attribute under the supplied name.
[Map](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Futil%2FMap.html%3Fis-external%3Dtrue)<[String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue),[Object](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FObject.html%3Fis-external%3Dtrue)>
**[asMap](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/ui/Model.html#asMap%28%29)**()
Return the current set of model attributes as a Map.
boolean
**[containsAttribute](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/ui/Model.html#containsAttribute%28java.lang.String%29)**([String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue) attributeName)
Does this model contain an attribute of the given name?
[Model](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/ui/Model.html)
**[mergeAttributes](http://tool.oschina.net/uploads/apidocs/Spring-3.1.1/org/springframework/ui/Model.html#mergeAttributes%28java.util.Map%29)**([Map](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Futil%2FMap.html%3Fis-external%3Dtrue)<[String](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fdownload.oracle.com%2Fjavase%2F6%2Fdocs%2Fapi%2Fjava%2Flang%2FString.html%3Fis-external%3Dtrue),?> attributes)
Copy all attributes in the supplied Map into this Map, with existing objects of the same name taking precedence (i.e.
(2)其实springmvc 在调用方法前,就会创建一个隐含的模型对象(隐含模型)Model,作为数据的存储容器。那么,若处理方法的入参为Model模型,springmvc就会将隐含模型的引用传递给这些入参;简单说,开发者可以通过一个Model类型的入参对象,访问到模型的所有数据,当然也可以添加新的属性数据!
【4】添加无key值的属性,修改IndexController.java::
1package com.smbms.controller; 2 3import org.apache.log4j.Logger; 4import org.apache.log4j.PropertyConfigurator; 5import org.springframework.stereotype.Controller; 6import org.springframework.ui.Model; 7import org.springframework.web.bind.annotation.RequestMapping; 8import org.springframework.web.bind.annotation.RequestParam; 9import org.springframework.web.servlet.ModelAndView; 10 11@Controller 12@RequestMapping("/a") 13public class IndexController { 14 private Logger log = Logger.getLogger(IndexController.class.getName()); 15 16 //Model 17 @RequestMapping(value="/hello") 18 public String hello4(String usernameB ,Model model){ 19 Integer value = 110; 20 log.info("welcome usernameB ,"+usernameB); 21 model.addAttribute("usernameB",usernameB); 22 model.addAttribute(usernameB); 23 model.addAttribute(value); 24 return "helloB"; 25 } 26}
输出结果:
18/01/07 12:07:39 INFO controller.IndexController: welcome usernameB ,mmb是否包含string :true是否包含integer:true

解释:(3)Model对象使用无参属性是,参数的类型名称会成为其默认的key!!大家可以自主探究:对于使用多个相同类型的无key参数,调用会出错吗?参数的key区分大小写吗?(答案:区分大小写!多个参数时,若是没有通过变量赋值,是取不出来的!)
3、POJO 对象模型的使用
【0】在工程新建一个包,新建一个JavaBean,这里举例User.java:
1package com.smbms.entities; 2 3import java.util.Date; 4import java.util.List; 5 6public class User { 7 private Integer id; 8 private String userCode; 9 private String userName; 10 private String userPassword; 11 private Integer gender; 12 private Date birthday; 13 private String phone; 14 private String address ; 15 private Integer userRole; 16 private Integer createdBy; 17 private Date creationDate; 18 private Integer modifyBy; 19 private Date modifyDate; 20 private String userRoleName; 21 22 public String getUserRoleName() { 23 return userRoleName; 24 } 25 public void setUserRoleName(String userRoleName) { 26 this.userRoleName = userRoleName; 27 } 28 public Integer getId() { 29 return id; 30 } 31 public void setId(Integer id) { 32 this.id = id; 33 } 34 public String getUserCode() { 35 return userCode; 36 } 37 public void setUserCode(String userCode) { 38 this.userCode = userCode; 39 } 40 public String getUserName() { 41 return userName; 42 } 43 public void setUserName(String userName) { 44 this.userName = userName; 45 } 46 public String getUserPassword() { 47 return userPassword; 48 } 49 public void setUserPassword(String userPassword) { 50 this.userPassword = userPassword; 51 } 52 public Integer getGender() { 53 return gender; 54 } 55 public void setGender(Integer gender) { 56 this.gender = gender; 57 } 58 public Date getBirthday() { 59 return birthday; 60 } 61 public void setBirthday(Date birthday) { 62 this.birthday = birthday; 63 } 64 public String getPhone() { 65 return phone; 66 } 67 public void setPhone(String phone) { 68 this.phone = phone; 69 } 70 public String getAddress() { 71 return address; 72 } 73 public void setAddress(String address) { 74 this.address = address; 75 } 76 public Integer getUserRole() { 77 return userRole; 78 } 79 public void setUserRole(Integer userRole) { 80 this.userRole = userRole; 81 } 82 public Integer getCreatedBy() { 83 return createdBy; 84 } 85 public void setCreatedBy(Integer createdBy) { 86 this.createdBy = createdBy; 87 } 88 public Date getCreationDate() { 89 return creationDate; 90 } 91 public void setCreationDate(Date creationDate) { 92 this.creationDate = creationDate; 93 } 94 public Integer getModifyBy() { 95 return modifyBy; 96 } 97 public void setModifyBy(Integer modifyBy) { 98 this.modifyBy = modifyBy; 99 } 100 public Date getModifyDate() { 101 return modifyDate; 102 } 103 public void setModifyDate(Date modifyDate) { 104 this.modifyDate = modifyDate; 105 } 106 public User(Integer id, String userCode, String userName, String userPassword, Integer gender, Date birthday, 107 String phone, String address, Integer userRole, Integer createdBy, Date creationDate, Integer modifyBy, 108 Date modifyDate) { 109 super(); 110 this.id = id; 111 this.userCode = userCode; 112 this.userName = userName; 113 this.userPassword = userPassword; 114 this.gender = gender; 115 this.birthday = birthday; 116 this.phone = phone; 117 this.address = address; 118 this.userRole = userRole; 119 this.createdBy = createdBy; 120 this.creationDate = creationDate; 121 this.modifyBy = modifyBy; 122 this.modifyDate = modifyDate; 123 } 124 public User() { 125 super(); 126 // TODO 自动生成的构造函数存根 127 } 128 @Override 129 public String toString() { 130 return "User [id=" + id + ", userCode=" + userCode + ", userName=" + userName + ", userPassword=" + userPassword 131 + ", gender=" + gender + ", birthday=" + birthday + ", phone=" + phone + ", address=" + address 132 + ", userRole=" + userRole + ", createdBy=" + createdBy + ", creationDate=" + creationDate 133 + ", modifyBy=" + modifyBy + ", modifyDate=" + modifyDate + "]"; 134 } 135 136}
【1】修改IndexController.java:
package com.smbms.controller; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import com.smbms.entities.User; @Controller @RequestMapping("/a") public class IndexController { private Logger log = Logger.getLogger(IndexController.class.getName()); //POJO+Model @RequestMapping(value="/hello") public String hello5(String usernameB ,Model model){ model.addAttribute("usernameB",usernameB); model.addAttribute(usernameB); User user = new User(); user.setUserName(usernameB); model.addAttribute("currentUser", user); model.addAttribute(user); return "helloB"; } }
【2】index.jsp 不作修改;
【3】helloB.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>bb</h1> <table width="500"> <tr> <td> <!-- ${usernameB}才是取值 --> <h1>usernameB(key:usernameB) --> ${usernameB}</h1> </td> </tr> <tr><td> <h1>无key值(key:string) --> ${string}</h1> </td></tr> <tr><td> <h1>无key值(key:integer) --> ${integer}</h1> </td></tr> <tr><td> <h1>有key值(key:currentUser.userName) --> ${currentUser.userName}</h1> </td> </tr> <tr><td> <h1>无key值(key:user.userName) --> ${user.userName}</h1> </td></tr> </table> </body> </html>
【4】输出结果:

解释:还是使用“.”进行属性值的访问。
4、Map 对象模型的使用
不难发现,其实Model也是一个Map 的数据结构,所以,我们使用Map 作为处理方法入参也是可以的。
【1】修改IndexController.java:
1package com.smbms.controller; 2 3import java.util.Map; 4 5import org.apache.log4j.Logger; 6import org.apache.log4j.PropertyConfigurator; 7import org.springframework.stereotype.Controller; 8import org.springframework.ui.Model; 9import org.springframework.web.bind.annotation.RequestMapping; 10import org.springframework.web.bind.annotation.RequestParam; 11import org.springframework.web.servlet.ModelAndView; 12 13import com.smbms.entities.User; 14 15@Controller 16@RequestMapping("/a") 17public class IndexController { 18 private Logger log = Logger.getLogger(IndexController.class.getName()); 19 20 //Map 21 @RequestMapping(value="/hello") 22 public String index(String username,Map<String,Object>model){ 23 log.info("hello springmvc!username:"+username); 24 model.put("usernameKK", username); 25 return "helloC"; 26 } 27}
【2】 index.jsp 不作修改;
【3】新建helloC.jsp:
1<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 2 pageEncoding="ISO-8859-1"%> 3<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4<html> 5<head> 6<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 7<title>Insert title here</title> 8</head> 9<body> 10 <h1>hello springmvc!</h1> 11 <h2>username(key:username) --> ${username}</h2> 12 <h2>username(key:usernameKK) --> ${usernameKK}</h2> 13</body> 14</html>
【4】输出结果:
18/01/07 12:49:20 INFO controller.IndexController: hello springmvc!username:mmb

4、@ModelAttribute 对象模型的注解使用:
若希望将入参的数据对象放入数据模型,可以在相应的参数入参前使用该注解。后续做跟进。
5、@ModelAttributes 对象模型的注解使用:
此注解可以将模型的属性存入HttpSession中,以便多个请求之间共享该属性。后续做跟进。