无法正确解析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系统中是可 ...
随机推荐
- 图像添加logo水印函数
<?php //图像添加水印函数 /** *为一张图片添加上一个logo水印(以保存新图片的方式实现) *@param string $picname 被缩放的处理图片源 *@param int ...
- 自己喜欢用的一个初始化的common.css
body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, p, blockquote ...
- c# lambda表达式学习
1. 普通绑定: public void button1_Click(object sender, EventArgs e) { MessageBox.Show("ok"); } ...
- Linux命令详解-info
info是一种文档格式,也是阅读此格式文档的阅读器:我们常用它来查看Linux命令的info文档.它以主题的形式把几个命令组织在一起,以便于我们阅读:在主题内以node(节点)的形式把本主题的几个命令 ...
- Python在七牛云平台的应用(一)
七牛云:(引用百度的介绍)七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化PaaS服务.围绕富媒体场景,七牛先后推出了对象存储,融合CDN加速,数据通用处理,内容反垃圾服务,以及直 ...
- [转]Ubuntu默认root用户密码
Ubuntu默认root用户密码 在试验的过程中,安装完Ubuntu后忽然意识到没有设置root密码,不知道密码自然就无法进入根用户下. 到网上搜了一下,原来是这么回事:Ubuntu的默认root密码 ...
- SGU 140. Integer Sequences 线性同余,数论 难度:2
140. Integer Sequences time limit per test: 0.25 sec. memory limit per test: 4096 KB A sequence A is ...
- Python面试题(十六)
1.取出两个升序数组中的最小的一半的元素组成一个新的升序数组. map(lambda x, y: x if x < y else y, a, b) 答案 2.用至少2种不同的方式删除一个list ...
- ballerina 学习十九 安全编程
ballerina 内部提供了几种常用的安全开发模型,token 认证(jwt) basic auth jwt 安全 参考代码 import ballerina/http; http:AuthPr ...
- Redis 集群方案介绍
由于Redis出众的性能,其在众多的移动互联网企业中得到广泛的应用.Redis在3.0版本前只支持单实例模式,虽然现在的服务器内存可以到100GB.200GB的规模,但是单实例模式限制了Redis没法 ...