在spring 整合freemaker中,freemaker定义了宏,宏中所有的参数默认均为必填项。
在普通的html或ftl中调用宏时,如果参数未给默认值,会报出如下错误。
When calling macro "****", required parameter "param2" (parameter #2) was not specified.
经查阅相关资料。得解决方案如下:
在配置文件中加入下面一则属性
<prop key="classic_compatible">true</prop>
具体位置见下列详细代码:
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath">
<value>/layuiadmin/src/views/</value>
</property>
<property name="freemarkerSettings"><!-- 设置FreeMarker环境属性 -->
<props>
<prop key="classic_compatible">true</prop>
<prop key="template_update_delay">5</prop><!--刷新模板的周期,单位为秒 -->
<prop key="default_encoding">UTF-8</prop><!--模板的编码格式 -->
<prop key="locale">UTF-8</prop><!-- 本地化设置 -->
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="time_format">HH:mm:ss</prop>
<prop key="number_format">0.####</prop>
<prop key="boolean_format">true,false</prop>
<prop key="whitespace_stripping">true</prop>
<prop key="tag_syntax">auto_detect</prop>
<prop key="url_escaping_charset">UTF-8</prop>
</props>
</property>
</bean>
问题得以解决。
额外问题:
在解决以上问题后,在ftl引用封装宏文件时,抛出fileNotFoundException。
<#import "../common/macro/standardList.ftl" as std />
加减此句xml配置,分别调试读freemaker源码,发现不加xml配置时,引用文件目录会自动添加一层/xxxx/../common,
而加此配置,则直接为../common/,freemaker遇到 startWith("../")则直接返回null。
于是在import时,更改为如下引入即可
<#import "/common/macro/standardList.ftl" as std />
/ 即为配置目录路径根目录