zoukankan      html  css  js  c++  java
  • 无法正确解析FreeMarker视图

    在使用SpringMVC处理FreeMarker的时候,出现了无法解析视图名的问题,报的异常说明的也非常清楚就是不能解析视图

    这个free就是一个FreeMarker的模板名,它的完整路径是/WEB-INF/freemarker/free.ftl

    既然是不能正确解析视图,那么一定是因为SpringMVC的视图解析器没有配置正确,先来看看配置的视图解析器:

        @Override
        public void configureViewResolvers(ViewResolverRegistry registry) {
             UrlBasedViewResolverRegistration freeMarker = registry.freeMarker();
             freeMarker.prefix("/WEB-INF/freemarker/");
             freeMarker.suffix(".ftl");
        }

    因为我的SpringMVC配置是通过继承WebMvcConfigurerAdapter实现的Java配置,所以就重写了其的configureViewResolvers方法,这个方法名通俗易懂,是配置视图解析器的简写方法。其实有使用SpringMVC处理过FreeMarker的同学应该就看到错误了,我自以为是的去配置前后缀(后缀还好,特别是前缀)。

    想要配置FreeMarker其实还需要配置FreeMarkerConfigurer:

        @Bean
        public FreeMarkerConfigurer freeMarkerConfigurer() {
            FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
            freeMarkerConfigurer.setTemplateLoaderPath("/WEB-INF/freemarker/");
            return freeMarkerConfigurer;
        }

    如果使用XML就这样配置:

     <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
       <property name="templateLoaderPath"><value>/WEB-INF/freemarker/</value></property>
     </bean>

    这是因为我们在这里配置了templateLoaderPath,所以就不需要再配置前缀了,而且这个templateLoaderPath属于必须的配置属性。

    那么,就再修改一下ViewResolver:

    @Override
        public void configureViewResolvers(ViewResolverRegistry registry) {
             registry.freeMarker();
        }

    其实看ViewResolverRegistry的方法调用也可以看出端倪,在调用jsp方法的时候有一个可以指定前后缀的重载方法,但是freeMarker方法只有这个空参数的方法。点进去freeMarker()会发现它的注释写的很清楚:会有一个默认的视图名前缀(就是templateLoaderPath)和一个以".ftl"结尾的后缀。本身这个方法就是个简写ViewResolver的方法,就不要做多余的事了。

    其实还有一种配置视图解析器的方式:

        @Bean
        public ViewResolver viewResolver() {
            FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver("",".ftl");
            viewResolver.setContentType("text/html;charset=UTF-8");
            viewResolver.setCache(true);
            return viewResolver;
        }

    这种方式与configViewResolver本质是等价的,但是其可以自己手动配置很多其他的视图解析器属性(其实我看中的是可以配置ContentType,可以解决FreeMarker中文乱码的问题)。

  • 相关阅读:
    Kettle Spoon 数据源连接中报ORA12505, TNS:listener does not currently know of SID given in connect descriptor的错误
    oracle创建用户和删除用户sql
    Kettle Spoon表输入使用变量
    Kettle Spoon 资源库连接后新建转换打不开,报Invalid byte 1 of 1byte UTF8 sequence异常
    oracle 误删除表/表中数据,恢复方法
    让ie兼容css3新属性backroundsize
    网页设计中为啥少用奇数字体?
    浏览器差异总结,可以用此判断浏览器版本(转)
    ie浏览器f12下调“浏览器模式”和“文档模式”的区别
    jquery的淡入淡出和隐藏,展示函数在ie中应用的bug
  • 原文地址:https://www.cnblogs.com/lz2017/p/9054752.html
Copyright © 2011-2022 走看看