由于未指定ObjectWarpper,因此不会加载自定义EL函数

Rae*_*ald 1 freemarker spring-mvc

我的Web应用程序使用Spring MVC和Freemarker.当它在启动后必须首先呈现网页(使用Freemarker 2.3.22)时,它会记录一条警告消息:

 Custom EL functions won't be loaded because no ObjectWarpper was specified
Run Code Online (Sandbox Code Playgroud)

(是的,ObjectWarpper错误信息有拼写错误)

不过,我觉得我了一个ObjectWrapper在我的配置Bean规定:

 <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="/WEB-INF/views/" />
    <property name="freemarkerSettings">
       <props>
          <prop key="url_escaping_charset">UTF-8</prop>
          <prop key="object_wrapper">DefaultObjectWrapper(2.3.22)</prop>
       </props>
    </property>
 </bean>
Run Code Online (Sandbox Code Playgroud)

那么我该怎样做才能正确设置ObjectWrapper并防止记录此警告消息?

如果我使用的话,我也有同样的问题default object_wrapper.

小智 6

这个问题也困扰我,我检查了org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer类的源代码,发现没有设置ObjectWrapper的taglibFactory.

所以我扩展FreeMarkerConfigurer类并覆盖getTaglibFactory()方法并替换spring mvc config.这是我的代码:

public class DefaultFreeMarkerConfigurer extends FreeMarkerConfigurer {
    @Override
    public TaglibFactory getTaglibFactory() {
        TaglibFactory tagLibFactory = super.getTaglibFactory();
        if (tagLibFactory.getObjectWrapper()==null) {
            tagLibFactory.setObjectWrapper(super.getConfiguration().getObjectWrapper());
        }
        return tagLibFactory;
    }
}
Run Code Online (Sandbox Code Playgroud)