5.8 Beetl常用错误解决
5.8.1 模板加载错误
MVC框架如果加载不到模板,请先确认是否指定了正确的ResourceLoader。对于Spring Boot,使用的是ClassPathResourceLoaer,加载位于templates目录下的模板
对于其他WEB应用,内部使用的是FileResourceLoader,模板根目录位于web根目录。
Spring常见模板加载问题有可能如下原因
- spring 配置使用了前缀,错误:
<property name="prefix" value="/WEB-INF/view/"></property>
可以指定模板根目录
<bean name="beetlConfig" class="org.beetl.ext.spring.BeetlGroupUtilConfiguration" init-method="init">
<property name="root" value="/WEB-INF/beetl.properties"/>
- spring 视图名使用了相对路径,错误
return "userDetail.btl"
应该使用如下
return "/user/user.btl"
- Spring Boot 自定义模板根目录
如果模板不在resources/templates目录下,比如在resouces/pages/views下,应该用如下方式初始化
ClasspathResourceLoader cploder = new ClasspathResourceLoader(BeetlTemplateConfig.class.getClassLoader(),
"pages/views");
beetlGroupUtilConfiguration.setResourceLoader(cploder);
如果以上办法如果还不行,请尝试调试ResourceLoader的exist的方法,找到加载模板不成功原因
5.8.2 开发模式下需改模板未刷新。
这种现象主要出现在idea +maven的工程里,因为idea默认情况下不会同步模板文件到target某,因此即使你修改了模板,beetl也看不到变化。解决办法可以参考 渔泯小镇
http://bbs.ibeetl.com/bbs/bbs/topic/612-1.html
如果是其他环境出现这个问题,请确认修改的模板是否同步到目标环境里
5.8.3 错误提示里有“directive dynamic "
Beetl使用FastRuntimeEngine有可能导致这个问题
ENGINE=org.beetl.core.engine.FastRuntimeEngine
这个引擎会假设同一个模板里的同一个全局变量应该类型唯一,如果你的模板是公共模板,类型不一样,可以在模板顶部使用dynamic,比如
<% directive dynamic xxx %>
如果你的模板这种情况很多,建议更换成默认引擎配置
ENGINE=org.beetl.core.engine.DefaultTemplateEngine
还有种情况是在Spring Boot 下出现,参考下一节
5.8.4 Spring Boot 出现 ClassCastException
请使用最新的Beetl版本,使用Starter或者参考Spring Boot集成一章集成Spring Boot。这是Spring Boot dev模式引起的问题