使用ModelAndView處理模型數(shù)據(jù)
1.SpringMVCTest.java控制器
package lxf.springmvc.handlers;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ModelAndView;
import lxf.springmvc.entity.User;
/**
* 測試spring-mvc
* @author lxf
*
*/
@RequestMapping("springmvc")
@Controller
public class SpringMVCTest {
public static final String SUCCESS = "success";
/**
* 目標(biāo)方法返回值是ModelAndView類型
* 其中包含視圖和模型信息
* SpringMVC會把ModelAndView的model中的數(shù)據(jù)放到request域?qū)ο笾? */
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView()
{
String viewName = SUCCESS;
ModelAndView modelAndView = new ModelAndView(viewName);
//添加模型數(shù)據(jù)到ModelAndView中
modelAndView.addObject("time", new Date());
return modelAndView;
}
}
2.success.jsp內(nèi)容
<h4>Success Page!</h4>
time:${requestScope.time}
3.訪問測試:
http://localhost:8081/spring-mvc-helloworld/springmvc/testModelAndView
4.瀏覽器輸出:
Success Page!
time:Sun Aug 06 17:56:12 CST 2017
使用Map及Model類型處理模型數(shù)據(jù)
Paste_Image.png
1.SpringMVCTest控制器:
public static final String SUCCESS = "success";
/**
* 目標(biāo)方法可以添加Map類型(實際上也可以是Model類型或ModelMap類型)的參數(shù)
* @param map
*/
@RequestMapping("testMap")
public String testMap(Map<String,Object>map)
{
System.out.println(map.getClass().getName());
map.put("names", Arrays.asList("Tom","Jerry","php"));
System.out.println("testMap");
return SUCCESS;
}
2.success.jsp頁面
<h4>Success Page!</h4>
names:${requestScope.names}
3.訪問測試:
http://localhost:8081/spring-mvc-helloworld/springmvc/testMap
4.瀏覽器輸出:
names:[Tom, Jerry, php]
使用@SessionAttributes注解(該注解只能放在類的上邊)
Paste_Image.png
1.SpringMVCTest控制器
/*
* 使用@SessionAttributes注解將模型中的數(shù)據(jù)放在session作用域中
* 可以存指定字符串哑梳,也可以存指定類型
*/
@SessionAttributes(value={"user"},types={String.class})
@RequestMapping("springmvc")
@Controller
public class SpringMVCTest {
public static final String SUCCESS = "success";
/**
* 使用@SessionAttributes注解將模型中的數(shù)據(jù)放在session作用域中
* @param map
* @return
*/
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Map<String,Object>map)
{
User user = new User("Liangxifeng","20");
//將user對象放到request請求域和Session域中,要保證@SessionAttributes(value={"user"},中value="user"
map.put("user", user);
//想request域和session域中存放key="lang"的字符串
map.put("lang", "java");
return SUCCESS;
}
}
2.success.jsp中打印存儲在session域中的數(shù)據(jù)
request user:${requestScope.user}<br>
session user:${sessionScope.user}<br>
request lang:${requestScope.lang}<br>
session lang:${sessionScope.lang}
3.請求測試:
http://localhost:8081/spring-mvc-helloworld/springmvc/testSessionAttributes
輸出:
request user:User [username=Liangxifeng, password=20, address=null]
session user:User [username=Liangxifeng, password=20, address=null]
request lang:java
session lang:java
@ModelAttribute注解的使用
我們通常將表單屬性數(shù)據(jù)取具,傳遞給后臺對應(yīng)的實例缤底,如果不做特殊設(shè)置的話,控制器是按著表單屬性個數(shù)和實體類屬性映射自娩,比如:表單中屬性為:
<!--
模擬修改操作
1.原始數(shù)據(jù)為:id=1 username="Tom" password="123456"
2.密碼不能修改
3.表單回顯用踩,模擬操作直接在表單編寫對應(yīng)的屬性值
-->
<form action="springmvc/testModelAttribute" method="post">
<input type="hidden" name="id" value="1">
username:<input type="text" name="username" value="Tom"/><br>
<input type="submit" value="提交" />
</form>
以上這個表單提交給給對應(yīng)控制器方法
/**
* 測試ModelAttribute注解,可以在表單提交之前忙迁,對對應(yīng)的實體屬性先賦值
* @param user
* @return
*/
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user)
{
System.out.println("修改:" + user);
return SUCCESS;
}
提交表單后脐彩,java控制臺輸出為:
修改:User [username=Tom12121, password=null, address=null]
從上面我們可以看到表單并沒有傳遞過來password屬性,那么我們想通過該對象修改數(shù)據(jù)庫姊扔,password不允許修改惠奸,此時的password=null,就不符合羅輯了恰梢,所以我們要在表單提交過來之前對User對象先賦值(數(shù)據(jù)來源可以是數(shù)據(jù)庫)佛南,使用 @ModelAttribute
注解實現(xiàn)
/**
* 用@ModelAttribute注解標(biāo)記的方法梗掰,會在每個目標(biāo)方法執(zhí)行執(zhí)之前被SpringMVC調(diào)用
* @param id
* @param map
*/
@ModelAttribute
public void getUser(@RequestParam(value="id",required=false) Integer id,
Map<String,Object>map){
if(id!=null){
//模擬從數(shù)據(jù)庫中獲取對象
User user = new User(1, "Tom", "123456", null);
System.out.println("從數(shù)據(jù)中獲取的對象是User = " + user);
map.put("user", user);
}
}
/**
* 測試ModelAttribute注解,可以在表單提交之前嗅回,對對應(yīng)的實體屬性先賦值
* @param user
* @return
*/
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user)
{
System.out.println("修改:" + user);
return SUCCESS;
}
表單提交后控制臺輸出:
從數(shù)據(jù)中獲取的對象是User = User [username=Tom, password=123456, address=null]
修改:User [username=Tom12121, password=123456, address=null]
SpringMVC確定目標(biāo)方法POJO類型入?yún)⒌倪^程
Paste_Image.png