初次接触spring mvc,想做一个小的练习项目,结果在ftl文件中引用其它的共通ftl文件时出错。
目录结构如图所示,想在login.ftl中引用common下的errormessage.ftl
<#include ‘/WEB-INF/ftl/common/errormessage.ftl‘ />
结果画面报错:
FreeMarker template error: Error reading included file "/WEB-INF/ftl/common/errormessage.ftl": Template "/WEB-INF/ftl/common/errormessage.ftl" not found. The failing instruction (FTL stack trace): ---------- ==> #include "/WEB-INF/ftl/common/errorme... [in template "home/login.ftl" at line 26, column 13] ---------- Java stack trace (for programmers): ---------- freemarker.core._MiscTemplateException: [... Exception message was already printed; see it above ...] at freemarker.core.Include.accept(Include.java:168) at
…………
怀疑是路径问题或是拼写错误,反复修改,病急乱投医,甚至将errormessage.ftl拷贝到login.ftl所在的目录下,用 ‘errormessage.ftl‘,‘/errormessage.ftl‘,‘./errormessage.ftl‘等不断尝试,不得解。
最后到处检查各种配置文件,发现在spring-mvc.xml文件中配置视图解析器时,指定过模板的加载路径:
<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
<!-- 配置freeMarker的模板路径 --> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="configLocation" value="classpath:freemarker.properties" /> <property name="templateLoaderPath" value="/WEB-INF/ftl/" /> <property name="freemarkerVariables"> <map> <entry key="xml_escape" value-ref="fmXmlEscape" /> </map> </property> </bean>
猜想在ftl中引用其它文件时也会受此影响,于是将<#include ‘/WEB-INF/ftl/common/errormessage.ftl‘ /> 修改为<#include ‘common/errormessage.ftl‘ />,问题解决。