2015-11-24 50 views
1

我的web應用程序使用Spring MVC和Freemarker。當它必須首先使開機後的網頁(使用的Freemarker 2.3.22),它會記錄一個警告消息:自定義EL函數將不會被加載,因爲沒有指定ObjectWarpper

Custom EL functions won't be loaded because no ObjectWarpper was specified 

(是的,ObjectWarpper;錯誤消息有錯字)

然而,我想我有我的配​​置Bean的ObjectWrapper規定:

<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> 

所以我必須做什麼正確地設置了一個ObjectWrapper,防止此警告消息被記錄?

如果我使用defaultobject_wrapper,我也有同樣的問題。

回答

1

該警告消息表示沒有將ObjectWrapper指定給freemarker.ext.jsp.TaglibFactory。確定性Spring自身實例化TaglibFactory本身,但不稱爲TaglibFactory.setObjectWrapper,它只在FreeMarker 2.3.22中添加,並且支持EL功能。

4

TagLibFactory並非始於Objectwrapper。這似乎工作:

@Configuration 
public class CustomFreemarkerConfiguration extends WebMvcConfigurerAdapter { 
    ... 
    @Bean 
    @Autowired 
    public TaglibFactory taglibFactory(ServletContext servletContext) throws IOException, TemplateException { 
     FreeMarkerConfigurer freemarkerConfig = configFreeMarkerConfigurer(servletContext); 

     TaglibFactory taglibFactory = freemarkerConfig.getTaglibFactory(); 
     taglibFactory.setObjectWrapper(freemarker.template.Configuration.getDefaultObjectWrapper(freemarker.template.Configuration.getVersion())); 

     return taglibFactory; 
    } 
    ... 
} 
5

這個問題也困擾着我,我查了org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer類的源代碼,發現taglibFactory inited沒有ObjectWrapper設定。

因此,我擴展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; 
    } 
} 
相關問題