ModelAndView

當(dāng)控制器處理完請(qǐng)求時(shí),通常會(huì)將包含視圖名稱(chēng)或視圖對(duì)象以及一些模型屬性的ModelAndView對(duì)象返回到DispatcherServlet。
因此,經(jīng)常需要在控制器中構(gòu)造ModelAndView對(duì)象。ModelAndView類(lèi)提供了幾個(gè)重載的構(gòu)造器和一些方便的方法,
讓你可以根據(jù)自己的喜好來(lái)構(gòu)造ModelAndView對(duì)象。這些構(gòu)造器和方法以類(lèi)似的方式支持視圖名稱(chēng)和視圖對(duì)象。
當(dāng)你只有一個(gè)模型屬性要返回時(shí),可以在構(gòu)造器中指定該屬性來(lái)構(gòu)造ModelAndView對(duì)象.通過(guò)ModelAndView構(gòu)造方法可以指定返回的頁(yè)面名稱(chēng),也可以通過(guò)setViewName()方法跳轉(zhuǎn)到指定的頁(yè)面 ,
使用addObject()設(shè)置需要返回的值,addObject()有幾個(gè)不同參數(shù)的方法,可以默認(rèn)和指定返回對(duì)象的名字。
調(diào)用addObject()方法將值設(shè)置到一個(gè)名為ModelMap的類(lèi)屬性,ModelMap是LinkedHashMap的子類(lèi),
具體請(qǐng)看類(lèi)。
ModelAndView 包括Model 和View ,下面是他的構(gòu)造方法中的兩個(gè)

public ModelAndView(String viewName, Map<String, ?> model) {  
        this.view = viewName;  
        if (model != null) {  
            getModelMap().addAllAttributes(model);  
        }  
    }  

頁(yè)面顯示

ModelAndView對(duì)象被放置在Request對(duì)象中,可以在頁(yè)面中利用${keyName}直接訪問(wèn)存在model中的對(duì)象。第一個(gè)參數(shù)是頁(yè)面名稱(chēng)。

package com.fts.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.fts.model.User;

@Controller
public class Test_ModelAndView {

    @RequestMapping("Test_ModelAndView")
    public ModelAndView test(){
        ModelAndView mv=new ModelAndView();
        //ModelAndView mv=new ModelAndView("welcome");
         mv.setViewName("welcome"); //返回的文件名  

            mv.addObject("message","hello kitty");  

            //類(lèi)
            User user = new User();
            user.setAge(20);
            user.setName("nihao");
            mv.addObject("user",user);  

            //List  
            List<String> list = new ArrayList<String>();  
            list.add("java");  
            list.add("c++");  
            list.add("oracle");  
            mv.addObject("bookList", list);  

            //Map  
            Map<String,String> map = new HashMap<String,String>();  
            map.put("zhangsan", "北京");  
            map.put("lisi", "上海");  
            map.put("wangwu", "深圳");  
            mv.addObject("map",map);  

            return mv;  

    }

    @RequestMapping("show") 
    public Map<String, String> getMap() { 
        Map<String, String> map = new HashMap<String, String>(); 
        map.put("key1", "value-1"); 
        map.put("key2", "value-2"); 
        return map; 
    } 


}

頁(yè)面

然后修改welcome.jsp輸出數(shù)據(jù),
遍歷集合可使用jstl表達(dá)式,需在jsp中引入頭文件

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

lib下導(dǎo)入jstl.jar和standard.jar。
首先這兩個(gè)jar在哪里可以找到,當(dāng)然可以在網(wǎng)上下載。
另外在tomcat下面就有,在\webapps\examples\WEB-INF\lib下
前提是你還沒(méi)有把webapps下面的一些無(wú)用項(xiàng)目刪掉。
welcome.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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>
<body>  
   <!-- 輸出普通字符 -->  
   ${message } <br/>  
   <!-- 輸出List -->  
   <p>書(shū)籍列表</p>  
   <c:forEach items="${bookList}" var="node">  
        <c:out value="${node}"></c:out>  
   </c:forEach>  
   <br/>  
   <br/>  

   ${user }<br/>  
   <br/> 
  <table border="1">
  <tr>
    <th>Month</th>
    <th>Savings</th>
  </tr>
  <tr>
    <td>${user.name }</td>
    <td>${user.age }</td>
  </tr>
</table>
     <br/>  
   <br/> 
   <!-- 輸出Map -->  
   <c:forEach items="${map}" var="node">  
        姓名:<c:out value="${node.key}"></c:out>  
        住址:<c:out value="${node.value}"></c:out>  
        <br/>  
   </c:forEach>  
</body>  
</body>
</html>
image

ModelAndView重定向

spring web framework利用ModelAndView也能實(shí)現(xiàn)forward、redirec

public ModelAndView getPage404MV() {        
    ModelAndView mv = new ModelAndView("redirect:/404.htm");
    return mv;
}
 //第三個(gè)參數(shù)(UserModel user)默認(rèn)為綁定對(duì)象  
    @RequestMapping(value = "/user/save", method = RequestMethod.POST)  
    public ModelAndView saveUser(HttpServletRequest request, HttpServletResponse response,UserModel user) throws Exception {  
        ModelAndView mv = new ModelAndView("/user/save/result");//默認(rèn)為forward模式  
//      ModelAndView mv = new ModelAndView("redirect:/user/save/result");//redirect模式  
        mv.addObject("message","保存用戶(hù)成功!");  
        return mv;  
    }  

map返回?cái)?shù)據(jù)

@RequestMapping("/demo2/show") 
    public Map<String, String> getMap() { 
        Map<String, String> map = new HashMap<String, String>(); 
        map.put("key1", "value-1"); 
        map.put("key2", "value-2"); 
        return map; 
    } 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容