我有使用 Spring 3.1 的 Java web 应用程序,以及用于渲染视图的 Freemarker 模板。我想根据特定应用程序属性的真/假值有条件地在视图中显示链接。
我在中定义了以下应用程序属性src/main/resources/application.properties
:
showLink=true
如果我使用带有 Spring MVC 的常规 JSP,我可以使用 SpEL 根据以下值有条件地显示链接showLink
:
<c:if test="${configuration['showLink']}">
<a href="...">some link</a>
</c:if>
如何在 Freemarker 模板中执行此操作?我尝试做这样的事情,但无法让它工作:
<#assign showLink>${configuration['showLink']}</#assign>
<#if showHelpLink>
<a href="...">some link</a>
</#if>
我看了看Spring freemarker 宏 http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/view.html#views-form-macros(在 spring.ftl 中),但我看到的最接近的是获取消息属性的能力,而不是应用程序属性。
我尝试过但不起作用的事情
我查看了 spring.ftl 中的宏,但最接近的是给我消息属性。
另外,我无法将值注入控制器,然后将其放入ModelMap
,因为我的 FreeMarker 模板是所有页面的标题,所以它是自动导入的:
<bean id="abstractFreemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer" abstract="true">
...
<property name="freemarkerSettings">
<props>
<prop key="auto_import">
/spring.ftl as spring, /myTemplate.ftl as myTemplate
</prop>
</props>
</property>
...
</bean>
我还没有尝试过的事情
我找到了一个博客文章 http://adaptiweb.blogspot.sk/2012/10/freemarker-template-with-spring.html描述如何手动向 Freemarker 添加对 SpEL 的支持。我宁愿不为我需要的这个情况做所有这些。
创建自定义标记库来检索应用程序属性值,因此我可以在我的 freemarker 模板中执行类似的操作:
<#assign showLink><foo:getAppProperty name="showLink"/></#assign>