zoukankan      html  css  js  c++  java
  • springmvc html与jsp解析器

    1. 配置多个视图解析器

    InternalResourceViewResolver内置了jsp解析器,用于解析jsp页面

    此处我们使用了InternalResourceViewResolver,其有一个buildView方法,该方法一定会创建一个View;所以呢View永远不为null(即使该jsp不存在);问题就是出在这;因为我们使用这个的时候默认是使用servlet forward转发的,此时并不知道该jsp是否存在。

    解决方案

    最简单的办法是使用其viewNames属性,来指定一个是否可以处理的规则

    <property name="viewNames" value="weixin*"/>

    <property name="viewNames" value="base*"/>

    如上两个的意思是对weixin或base开头的视图名进行处理,比如返回的视图名为weixin/a 那么会交给viewNames为weixin*的那个解析器处理;支持的规则可以查看javadoc。

    <!-- 视图解析器,可以根据不同的请求配置不同的响应路径 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewNames" value="weixin*"/>
        <property name="prefix" value="/" />
        <property name="suffix" value=".jsp" />
        <property name="order" value="0" />
    </bean>
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewNames" value="base*"/>
        <property name="prefix" value="/login/" />
        <property name="suffix" value=".jsp" />
        <property name="order" value="1" />
    </bean>
    
    如何调用?
    return new ModelAndView("redirect:weixin/index.jsp");// 走的是第一个视图解析器
    return new ModelAndView("redirect:base/login.jsp");// 先判断第一个,不是以weixin开头的,再走第二个视图解析器,符合要求

    2. 配置HTML视图解析器

    html页面需要freemark解析

    <!--    <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
            <property name="prefix" value="/WEB-INF/views/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>-->
        <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
            <property name="templateLoaderPath">
                <value>/WEB-INF/views/</value>
            </property>
        </bean>
        <bean id="htmlviewResolver"
              class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
            <property name="suffix" value=".html" />
            <property name="order" value="0"></property>
            <property name="contentType" value="text/html;charset=UTF-8"></property>
        </bean>

    运行tomcat,可能出现如下异常:

    Caused by: java.lang.ClassNotFoundException: org.springframework.ui.freemarker.FreeMarkerConfigurationFactory
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1309)

    导入依赖包:

        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
            <version>4.3.13.RELEASE</version>
        </dependency>

    仍可能出现如下异常:

    Caused by: java.lang.ClassNotFoundException: freemarker.cache.TemplateLoader

    导入依赖包:

        <dependency>
          <groupId>org.freemarker</groupId>
          <artifactId>freemarker</artifactId>
          <version>2.3.23</version>
        </dependency>

    还可能出现如下异常:

    Caused by: java.lang.NoSuchFieldError: DEFAULT_INCOMPATIBLE_IMPROVEMENTS

    这种异常一般是由freemark依赖包版本导致,可通过变更freemark版本解决(一般使用较高版本的freemark依赖包)

  • 相关阅读:
    [原]【实例化需求】1.FitNesse工具应用简介
    [原][问题解决]常见问题的5种解决办法(由Jenkins问题解决谈起)
    [原][自动化测试]Robot Framework Selenium基本使用
    [原]好玩的Linux,关于时间cal命令
    [原][问题解决]Romote Control 图形化界面显示问题解决办法
    【SBE】由需求管理谈起
    [Robot]关于robot的几个学习网站
    coolite中在UserControl中使用Coolite.AjaxMethods方法
    javascript实现页面加载进度条(转)
    coolite 在前台更新Window中控件的值
  • 原文地址:https://www.cnblogs.com/yelao/p/11684923.html
Copyright © 2011-2022 走看看