zoukankan      html  css  js  c++  java
  • Spring MVC ModelAndView

    使用ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图。从名字上看ModelAndView中的Model代表模型,View代表视图,这个名字就很好地解释了该类的作用。

    业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring MVC框架。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的页面上。

    它既能返回视图(html页面), 还能携带该html页面所需要的数据,只要把html页面连同数据一起返回给前端,我们后端的工作就结束了。

    知道了它强大的功能,下面解析一下该如何使用。

    首先它是如何返回视图的?
    一个ModelAndView只能返回一个html页面,你只需要把html页面的名字给ModelAndView就可以了。
    例如我想打开home.html页面: ModelAndView.setViewName(“home”)

    其次它如何携带数据?
    它有很多函数,其中最好用的就是addObject(name,object ),把你想要传到前端的object起一个名字,在前端就可以根据你起的名字获得这个object。

    它可以携带很多数据,但是注意起名不能重复。

    通过ModelAndView构造方法可以指定返回的页面名称,也可以通过setViewName()方法跳转到指定的页面 , 使用addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字。

    ========================================

    一,ModelAndView 介绍:

      1)ModelAndView 用于后台与前端页面交互;

      2)可以用于重定向与转发到指定页面,

      3)可以保存数据然后渲染到页面

    二,使用:

      1)在Controller层的方法返回值写为ModelAndView 

      2)在方法内 new一个 ModelAndView

      3)给ModelAndView 赋值

      4)返回ModelAndView

    三,常用返回类型与页面渲染方法:

    1)返回值

    // List
     List<String> list = new ArrayList<String>();
     list.add("张三");
     list.add("李四");
     list.add("王五");
     mav.addObject("userList", list);
     
    // Map
     Map<String, String> map = new HashMap<String, String>();
     map.put("zhangsan", "张三");
     map.put("lisi", "李四");
     map.put("wangwu", "王五");
     mav.addObject("map", map);

    2)页面

    //list 
    <%@ prefix="c" taglib uri="http://java.sun.com/jsp/jstl/core" %>
       <c:forEach items="${userList}" var="u"> 
       <c:out value="${u}"></c:out> 
    </c:forEach>
    
    //map
    <c:forEach items="${map}" var="n"> 
       <c:out value="${n.value}"></c:out> 
    </c:forEach>

    四,Spring MVC 配置:

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/" />
    <!-- 
    prefix用于给返回的视图名之前添加路径,例如返回index,
    那就在项目的根路径下加上 /index (如果项目路径是:http://localhost:8080/portal)
    那么返回的路径就是:http://localhost:8080/portal/index
    -->
    <property name="suffix" value=".jsp" />
    <!-- 
    suffix用于给返回的视图名之前添加后缀,例如返回index,
    那么返回的路径就是:http://localhost:8080/portal/index.jsp
    -->
    </bean>

    ========================================

     示例 1:

    注解的方式

    package com.itheima.config;
    
    
    import com.itheima.interceptor.ResourcesInterceptor;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.*;
    import org.springframework.web.servlet.config.annotation.*;
    import org.springframework.web.servlet.view.InternalResourceViewResolver;
    
    import java.util.List;
    
    @Configuration
    @PropertySource("classpath:ignoreUrl.properties")
    //等同于<context:component-scan base-package="com.itheima.controller"/>
    @ComponentScan({"com.itheima.controller"})
    /*@Import({MyWebMvcConfig.class})*/
    @EnableWebMvc
    public abstract class SpringMvcConfig implements WebMvcConfigurer {
    
        @Value("#{'${ignoreUrl}'.split(',')}")
        private List<String> ignoreUrl;
    
        @Bean
        public ResourcesInterceptor resourcesInterceptor(){
    
            return new ResourcesInterceptor(ignoreUrl);
        }
    
        /*
         * 在注册的拦截器类中添加自定义拦截器
         * addPathPatterns()方法设置拦截的路径
         * excludePathPatterns()方法设置不拦截的路径
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor( resourcesInterceptor()).addPathPatterns("/**").excludePathPatterns("/css/**","/js/**","/img/**");
        }
    
        /*
         *开启对静态资源的访问
         * 类似在Spring MVC的配置文件中设置<mvc:default-servlet-handler/>元素
         */
        @Override
        public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    
            configurer.enable();
        }
    
        /* 配置视图解析器的,该方法的参数 ViewResolverRegistry 是一个注册器,用来注册你想自定义的视图解析器等。 */
        @Override
        public void configureViewResolvers(ViewResolverRegistry registry) {
            /*   前缀为 /admin/   后缀为 .jsp  */
            registry.jsp("/admin/",".jsp");
        }
    
    }

    ========================================

    REF

    https://blog.csdn.net/qq_40774175/article/details/87932825

    https://www.cnblogs.com/alsf/p/9134589.html

  • 相关阅读:
    最小生成树Prim算法和Kruskal算法(转)
    tarjan有向图的强连通
    匈牙利算法
    字符类数组的常用函数
    三层登录——C#版
    监考风波
    SQL Server 2012 安装——安装 OR 卸载
    SQL Server 2012安装——.net framework 3.5离线安装
    坚定自我 守住寂寞
    浅谈三层
  • 原文地址:https://www.cnblogs.com/emanlee/p/15731581.html
Copyright © 2011-2022 走看看