无法正确解析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中文乱码的问题)。
无法正确解析FreeMarker视图的更多相关文章
- [Spring MVC] - JSP + Freemarker视图解释器整合
Spring MVC中如果只使用JSP做视图,可以使用下面这段即可解决: <!-- 视图解释类 --> <bean class="org.springframework.w ...
- [Spring MVC] - JSP + Freemarker视图解释器整合(转)
Spring MVC中如果只使用JSP做视图,可以使用下面这段即可解决: <!-- 视图解释类 --> <bean class="org.springframework.w ...
- WebAPI接口返回ArrayList包含Dictionary对象正确解析
一.问题提出 为了减少流量,将key-value(键值对)直接输出到Dictionary<string, string>,接口返回结果如下: 其中{}里面内容如下: 上图显示600是键,4 ...
- Smarty模板Windows下写代码 放到CentOS6.5无法正确解析
如题:报错: Unable to load template file 'System/header.htm' in '/var/www/website/cms/Template/Default/We ...
- 深入解析MySQL视图view
阅读目录---深入解析MySQL视图view 创建视图 查看视图 视图的更改 create or replace view alter DML drop 使用with check option约束 嵌 ...
- springMVC源码解析--ViewResolver视图解析器执行(三)
之前两篇博客springMVC源码分析--ViewResolver视图解析器(一)和springMVC源码解析--ViewResolverComposite视图解析器集合(二)中我们已经简单介绍了一些 ...
- 整合Freemarker视图层和整合jsp视图层和全局捕获异常
SpringBoot静态资源访问 1.静态资源:访问 js / css /图片,传统web工程,webapps springboot 要求:静态资源存放在resource目录下(可以自定义文件存放) ...
- 峰哥说技术:08-Spring Boot整合FreeMarker视图
Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 08 峰哥说技术:Spring Boot整合FreeMarker视图 前面带着大家整合了Thymelea ...
- springMVC源码解析--ViewResolverComposite视图解析器集合(二)
上一篇博客springMVC源码分析--ViewResolver视图解析器(一)中我们介绍了一些springMVC提供的很多视图解析器ViewResolver,在开发的一套springMVC系统中是可 ...
随机推荐
- 前端框架MVVM是什么(整理)
前端框架MVVM是什么(整理) 一.总结 一句话总结:vm层(视图模型层)通过接口从后台m层(model层)请求数据,vm层继而和v(view层)实现数据的双向绑定. 1.我大前端应该不应该做复杂的数 ...
- 雷林鹏分享:Ruby 正则表达式
Ruby 正则表达式 正则表达式是一种特殊序列的字符,它通过使用有专门语法的模式来匹配或查找其他字符串或字符串集合. 语法 正则表达式从字面上看是一种介于斜杠之间或介于跟在 %r 后的任意分隔符之间的 ...
- IOS-网络(ASIHTTPRequest的使用简介)
使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且使用起来非常简单的一套API,用Objective ...
- Java9新特性
转载:http://blog.csdn.net/qq_32524177/article/details/77014757 写在前面的话:Java9来了,搜索了很多关于Java9的新特性,但文献不多,特 ...
- PHP:第五章——字符串的统计及查找
<?php header("Content-Type:text/html;charset=utf-8"); /*字符串的统计与查找*/ //1.获取字符串的长度 //1)st ...
- 2018.11.29 Wireless technology roadmap(1)
1物联网还是卖开发板阶段. BT NBIoT 窄带物联网(Narrow Band Internet of Things) Sigfox Zigbee Wifi:大数据量传输 LoRA :远距离无线电( ...
- openssl RSA证书签发命令
一.生成根证书 1. 创建根证书私钥 openssl genrsa -out ca.key 2048 2. 创建根证书申请文件 openssl req -new -key ca.key -out ca ...
- c# sqlbulkcopy批量插入数据
dt信息中包含数据和表名 public static void SqlBulkInsert(DataTable dt, string connStr) { try { using (var conn ...
- adb命令安装apk
1.将需要安装的apk放在platform-tools下 2.将手机和电脑连接,在cmd中输入 adb devices查看 3.使用adb命令安装apk,在cmd中输入:adb install apk ...
- 移动端H5调用摄像头(选择上传图片)
<label>照相机</label> <input type="file" id='image' accept="image/*" ...