<bean id="beansWrapper" class="freemarker.ext.beans.BeansWrapper">
<property name="exposeFields" value="true" />
</bean>
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freema rker.FreeMarkerConfigurer">
<property name="objectWrapper">
<ref local="beansWrapper" />
</property>
<property name="templateLoaderPath">
<value>/WEB-INF/views/</value>
</property>
</bean>
这不起作用,我得到一个例外:
org.springframework.beans.NotWritablePropertyExcep tion:bean类的无效属性'objectWrapper'[org.springframework.web.servlet.view.freemarker.Fr eeMarkerConfigurer]:Bean属性'objectWrapper'不可写或具有无效的setter方法。 setter的参数类型是否与getter的返回类型匹配?
setObjectWrapper需要一个ObjectWrapper实例,我以为我在这个配置中传递了一个。
根据回复中的建议(我在编辑问题时无法看到,对于缺少归因感到抱歉),我试过了:
<bean id="beansWrapper" class="freemarker.ext.beans.BeansWrapper">
<property name="exposeFields" value="true" />
</bean>
<bean id="freemarkerAppConfig" class="freemarker.template.Configuration">
<property name="objectWrapper">
<ref local="beansWrapper"/>
</property>
</bean>
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="configuration">
<ref local="freemarkerAppConfig" />
</property>
<property name="templateLoaderPath">
<value>/WEB-INF/views/</value>
</property>
</bean>
但这仍然不太奏效。如果我没弄错的话,通过调用setConfiguration,FreeMarkerConfigurer的所有其他属性都被提供的配置覆盖。
不幸的是,我看不到轻松设置模板加载路径的方法,因为配置bean需要Dir对象,而不是字符串。
答案 0 :(得分:3)
更多阅读Spring文档向我展示了道路:
<bean id="beansWrapper" class="freemarker.ext.beans.BeansWrapper">
<property name="directoryForTemplateLoading" value="WEB-INF/views/" />
<property name="exposeFields" value="true" />
</bean>
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="freemarkerVariables">
<map>
<entry key="objectWrapper" value-ref="beansWrapper" />
</map>
</property>
<property name="templateLoaderPath">
<value>/WEB-INF/views/</value>
</property>
</bean>
如果有人想知道,这样做是为了让FreeMarker可以访问对象的公共属性而无需getter和setter。也许不是Java中的犹太人,但现在使用Groovy会更好。