ModelAndView 详解

ModelAndView 详解当控制器处理完请求时,通常会将包含视图名称或视图对象以及一些模型属性的ModelAndView对象返回到DispatcherServlet。因此,经常需要在控制器中构造ModelAndView对象。ModelAndView类提供了几个重载的构造器和一些方便的方法,让你可以根据自己的喜好来构造ModelAndView对象。这些构造器和方法以类似的方式支持视图名称和视图对象。当你只有一个模型

大家好,又见面了,我是你们的朋友全栈君。

当控制器处理完请求时,通常会将包含视图名称或视图对象以及一些模型属性的ModelAndView对象返回到DispatcherServlet。
因此,经常需要在控制器中构造ModelAndView对象。ModelAndView类提供了几个重载的构造器和一些方便的方法,
让你可以根据自己的喜好来构造ModelAndView对象。这些构造器和方法以类似的方式支持视图名称和视图对象。
当你只有一个模型属性要返回时,可以在构造器中指定该属性来构造ModelAndView对象.通过ModelAndView构造方法可以指定返回的页面名称,也可以通过setViewName()方法跳转到指定的页面 ,
使用addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字。
调用addObject()方法将值设置到一个名为ModelMap的类属性,ModelMap是LinkedHashMap的子类,
具体请看类。
ModelAndView 包括Model 和View ,下面是他的构造方法中的两个

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

页面显示

ModelAndView对象被放置在Request对象中,可以在页面中利用${keyName}直接访问存在model中的对象。第一个参数是页面名称。

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");  

            //类
            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; 
    } 


}

页面

然后修改welcome.jsp输出数据,
遍历集合可使用jstl表达式,需在jsp中引入头文件

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

lib下导入jstl.jar和standard.jar。
首先这两个jar在哪里可以找到,当然可以在网上下载。
另外在tomcat下面就有,在\webapps\examples\WEB-INF\lib下
前提是你还没有把webapps下面的一些无用项目删掉。
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>书籍列表</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>

这里写图片描述

ModelAndView重定向

spring web framework利用ModelAndView也能实现forward、redirec

public ModelAndView getPage404MV() {        
    ModelAndView mv = new ModelAndView("redirect:/404.htm");
    return mv;
}
 //第三个参数(UserModel user)默认为绑定对象 
    @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");//默认为forward模式 
// ModelAndView mv = new ModelAndView("redirect:/user/save/result");//redirect模式 
        mv.addObject("message","保存用户成功!");  
        return mv;  
    }  

map返回数据

@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; 
    } 

在jsp页面中可直通过${key1}获得到值, map.put()相当于request.setAttribute方法。
写例子时发现,key值包括 – . 时会有问题.

jsp
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160998.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java工作流详解

    java工作流详解什么是工作流?工作流:两个或两个以上的人,为了共同的目标,连续的以串行或并行的方式去完成某一业务。业务:工作流所指业务涵盖了与经营相关的活动。串行或并行:业务中的步骤也许以一步接着一步的方式进行,我们称之为串行;或者由不同的人或组合根据不同的情况处理,我们称之为并行。两个或两个以上的人:如工作流的名称所表达的含义,一个人处理的业务不称其为工作流,只有任务从一个人”流”向另一个人的时候,才有工作流。共同的目标:个体参与工作流必须是为了同一个工作目标。如果个体处于两个相互独立的项目之中,不会

    2022年5月16日
    78
  • 5g端到端网络切片技术_5G网络切片的特征

    5g端到端网络切片技术_5G网络切片的特征1、网络切片的一些概念网络切片(Slice):基于客户化需求,可以被设计、部署、维护的逻辑网络,旨在满足特定的客户、业务、商业场景的业务特点及商业模式。网络切片实例(E2ESliceInstance-ESI):网络切片实例(Instance)是一个临时逻辑网络,跨多个技术域,包含:(1)组网络:”功能”(Function)即虚拟网元(终端、接入网、回传网、核心网、业务网络)及网管系统对应的资源;(2)存储、运算;(3)连接关系。2、网络切片原因:未来业务需求差异

    2022年9月27日
    4
  • 计算机会员登录系统,华林会员登录系统 会员登录系统.doc「建议收藏」

    计算机会员登录系统,华林会员登录系统 会员登录系统.doc「建议收藏」华林会员登录系统会员登录系统重庆三峡学院验证体系文档题目:会员注册登录系统专业:计算科学与技术年级:2009级学号:200906024129作者:唐承兰完成时间:2011年5月会员注册登录系统目录摘要……………………………………………………………..

    2022年4月20日
    174
  • rst markdown_r语言markdown导出

    rst markdown_r语言markdown导出markdown文件转RST文件时遇到的一些问题最近需要把一些markdown文件转成RST文件,第一次接触RST文件,使用中会有一些语法问题需要注意。在这里做个记录。转化工具我们可以先采用工具对整体做个初步的转换。因为转换工具不能做到完美转换,在初步转换完成后再根据实际的显示情况进行下一步的调整。这里推荐一个网站:MD在线转换成RST如果不注册的话,每天最多可以转化10个文件。后续调整转换后的大体格式是正确的,包括不同级别的标题,一些加粗斜体显示等,但是很多细节还是要自己调整的。1.网页链

    2022年9月30日
    6
  • vsftpd 添加用户_vsftpd本地用户无法登录

    vsftpd 添加用户_vsftpd本地用户无法登录VSFTPD的安装网上有很多教程这里就不多说了,这里主要是针对做主机空间服务的朋友在安装好vsftpd后如何为用户增加ftp账号先来看一看我们一般在*inux系统下面如何增加用户的#adduser用户名#passwd用户名回车后系统会给出以下提示:ChangingpasswordforuserXX用户名.Newpassword:BADPASSWORD:itdoesnotco…

    2022年9月25日
    6
  • 给定一个罗马数字,将其转换成整数_计算并输出给定整数n的所有因子

    给定一个罗马数字,将其转换成整数_计算并输出给定整数n的所有因子问题描述:给定一个整数转换成对应的罗马字符。罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如,罗马数字2写做II,即为两个并列的1。12写做XII,即为X+II。27写做…

    2022年9月27日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号