gpt4 book ai didi

spring - 如何在 Freemarker 模板中访问 Spring 应用程序属性?

转载 作者:行者123 更新时间:2023-12-02 01:09:30 25 4
gpt4 key购买 nike

我有使用 Spring 3.1 的 Java Web 应用程序,以及用于渲染 View 的 Freemarker 模板。我想根据特定应用程序属性的真/假值有条件地在 View 中显示链接。

我在 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 macros (在 spring.ftl 中),但我看到的最接近的是获取消息属性的能力,而不是应用程序属性。

我尝试过但不起作用的事情

  1. 我查看了 spring.ftl 中的宏,但最接近的是给我消息属性。

  2. 此外,我无法将值注入(inject) Controller ,然后将其放入 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>

我还没有尝试过的事情

  1. 我找到了 blog post描述如何手动向 Freemarker 添加对 SpEL 的支持。我宁愿不为我需要的这个情况做所有这些。

  2. 创建自定义标记库来检索应用程序属性值,这样我就可以在我的 freemarker 模板中执行类似的操作:

<#assign showLink><foo:getAppProperty name="showLink"/></#assign>

最佳答案

我使用 Spring 加载属性

<util:properties id="myProperties" location="classpath:/myprops.properties" />

然后在配置中我使用“freemarkerVariables”属性,例如

<bean id="abstractFreemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer" abstract="true">
...
<property name="freemarkerVariables" ref="staticAttributesMap" />

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

其中 var1/var2/value1/value2 都是文件中的属性。

您可以像这样访问 freemarker 中的属性

$var1$
$var2$
$myMap.v1$
$myMap.v2$

此解决方案的唯一缺点是,属性不会自动可供 Freemarker 使用。您需要添加您想要的内容。

关于spring - 如何在 Freemarker 模板中访问 Spring 应用程序属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15302775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com