Ste*_*e K 2 spring freemarker spring-mvc
我有使用Spring 3.1的Java webapp,Freemarker模板用于渲染视图.我想根据特定应用程序属性的true/false值有条件地在视图中显示一个链接.
我在以下位置定义了以下app属性src/main/resources/application.properties:
showLink=true
如果我使用常规JSP与Spring MVC,我可以使用SpEL根据以下值有条件地显示链接showLink:
<c:if test="${configuration['showLink']}">
<a href="...">some link</a>
</c:if>
Run Code Online (Sandbox Code Playgroud)
我如何在Freemarker模板中执行此操作?我尝试过这样的事情,但无法让它发挥作用:
<#assign showLink>${configuration['showLink']}</#assign>
<#if showHelpLink>
<a href="...">some link</a>
</#if>
Run Code Online (Sandbox Code Playgroud)
我查看了Spring freemarker宏(在spring.ftl中),但我看到的最接近的是能够获取消息属性,而不是app属性.
我查看了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>
Run Code Online (Sandbox Code Playgroud)
我发现了一篇博客文章,描述了如何手动将支持SpEL添加到Freemarker.在我需要它的情况下,我宁愿不做所有这些.
创建自定义标记库以检索应用程序属性值,因此我可以在我的freemarker模板中执行以下操作:
<#assign showLink><foo:getAppProperty name="showLink"/></#assign>
Run Code Online (Sandbox Code Playgroud)
我在春天使用加载属性
<util:properties id="myProperties" location="classpath:/myprops.properties" />
Run Code Online (Sandbox Code Playgroud)
然后在配置中我使用"freemarkerVariables"属性,例如
<bean id="abstractFreemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer" abstract="true">
...
<property name="freemarkerVariables" ref="staticAttributesMap" />
Run Code Online (Sandbox Code Playgroud)
<util:map id="staticAttributesMap">
<entry key="var1" value="${var1}" />
<entry key="var2" value="${var2}" />
<entry key="myMap">
<map>
<entry key="v1" value="${value1}" />
<entry key="v2" value="${value2}" />
</map>
</entry>
</util:map>
Run Code Online (Sandbox Code Playgroud)
其中var1/var2/value1/value2是文件中的所有属性.
您可以像这样访问freemarker中的属性
$var1$
$var2$
$myMap.v1$
$myMap.v2$
Run Code Online (Sandbox Code Playgroud)
这个解决方案唯一的缺点是,Freemarker不会自动提供属性.你需要添加你想要的.
| 归档时间: |
|
| 查看次数: |
8471 次 |
| 最近记录: |