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

2024-02-21

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

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

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

  2. 另外,我无法将值注入控制器,然后将其放入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. 我找到了一个博客文章 http://adaptiweb.blogspot.sk/2012/10/freemarker-template-with-spring.html描述如何手动向 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 使用。您需要添加您想要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Freemarker 模板中访问 Spring 应用程序属性? 的相关文章

随机推荐

  • 为什么 c++ std::max_element 这么慢?

    我需要找到向量中的最大元素 所以我使用std max element 但我发现它是一个非常慢的函数 所以我编写了自己的版本并设法获得 x3 更好的性能 下面是代码 include
  • 如果等于运算符没有被空格包围,为什么它不起作用?

    我尝试了以下脚本 bin bash var1 Test 1 var2 Test 2 if var1 var2 then echo Equal else echo Not equal fi 它给了我Equal 虽然应该已经打印出来了Not e
  • 如何在 ASP.NET Core 2.0 和 EF Core 2.0 中将应用程序设置从项目根获取到 IDesignTimeDbContextFactory 实现

    我正在 ASP NET Core 2 0 中构建应用程序 但在 EntityFramework 迁移方面遇到问题 我的 DbContext 位于一个单独的项目中 解决方案名称 项目名称前缀 Data 因此我创建了 IDesignTimeDb
  • D3 动态重绘Y轴

    我想创建一个具有多个 线性 轴的动态图 绘制轴后 我想 当新数据到达时 更改数据域并重新绘制 更新轴 我可以使用 D3 选择现有轴并执行此操作 还是必须在代码中显式保存每个轴 我希望我的问题不会令人困惑 init all Y Axis ea
  • C++ STL 容器和就地构建

    请考虑以下事项 class CMyClass public CMyClass printf Constructor n CMyClass const CMyClass printf Copy constructor n int main s
  • 什么是棱镜?

    我试图更深入地了解lens库 所以我尝试使用它提供的类型 我已经有了一些使用镜头的经验 知道它们的强大和方便 所以我转向了 Prisms 但我有点迷失了 棱镜似乎可以做两件事 确定实体是否属于总和类型的特定分支 如果属于 则捕获元组或单例中
  • Golang 方法函数中的接收器类型无效

    我正在尝试制作一个简单的包来将 SSH 命令发送到服务器 我有以下代码 type Connection ssh Client func Connect addr user password string conn Connection er
  • 服务器如何知道请求来自客户端,而不是窃听的黑客?

    我有一个简单的问题 我找不到简单的答案 可能我遗漏了一些东西 或者我不知道某些网络概念是如何工作的 我想知道我不知道的事情 简单地说 问题是虽然窃听是可能的 但服务器如何知道请求来自客户端 而不是窃听的黑客 设想 无论我采用什么安全策略 我
  • 使用 Intellij 的 Yeoman(想法 12)

    使用 OSX 10 8 4 Idea 12 节点 v0 10 17 yo v1 0 3 当尝试使用 Yeoman 作为外部工具时 我得到 usr local bin yo angular env node No such file or d
  • 如何在ConstraintLayout中使用ViewStub?

    似乎在充气时ViewStub in a ConstraintLayout 生成的视图失去了所有约束 我想我们可以使用以下方法定义膨胀视图的约束ConstraintSet 但这违背了目的ViewStub 有没有好的方法可以做到这一点 有一个简
  • Play 框架不会运行内联 JavaScript

    我正在尝试使用 play 框架 2 6 和 scala 设置一个简单的应用程序 但我似乎无法在 html 模板上运行内联 javascript 我不断收到错误 拒绝执行内联脚本 因为它违反了以下内容安全策略指令 default src se
  • 如何向BroadcastReceiver的子类传递参数?

    我设法得到了我的耳机按钮被识别 https stackoverflow com q 15057291 636571按下时由我的应用程序调用 但其中一个按钮需要调用 MyCustomActivity 中的方法 问题是 onReceive 的第
  • 用python监听音频输出[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 第一次在 python 中使用音频 发现了很多可以收听 流式传输麦克风的示例 但是经过大量谷歌搜索 找不到如何收听计算机输出的音频 这
  • 如何计算表格的列数

    例如 tbl ifo id name age gender 1 John 15 Male 2 Maria 18 Female 3 Steph 19 Female 4 Jay 21 Male 如何使用 mysql 计算该表的列数 SELECT
  • 如何制作内核模块二进制 blob

    我想为各种发行版分发专有的 Linux 模块 而不需要为所有发行版预先构建模块 例如我有以下文件 wrapp c mod c fops c 所有wrapp c都是我正在使用的所有内核函数的包装器 unsigned int wrap iore
  • Knockout.js 在字符串列表上的“foreach”中使用“value:”绑定 - 不会更新

    Here is jsFiddle http jsfiddle net bmh ca SksQ3 1 演示以下问题 给定一个 可观察的 字符串列表上的 foreach 绑定 可观察值似乎不会因 foreach 内绑定的输入标签的更改而更新 人
  • 如何检测 python 字符串中的最后一位数字

    我需要检测字符串中的最后一位数字 因为它们是我的字符串的索引 它们可能是 2 64 所以不方便只检查字符串中的最后一个元素 然后尝试第二个 等等 字符串可能就像asdgaf1 hsg534 即字符串中也可能有其他数字 但中间有一些数字 并且
  • Flash 设计师/编码员协作最佳实践

    我已经完成了几个 Flash 项目 作为 ActionScripter 由设计师负责所有漂亮的事情和动画 刚开始时 我发现了很多有关 ActionScript 编码和 Flash 设计的信息 大多数可用信息似乎都集中在其中之一 我没有找到任
  • cURL 慢启动传输时间

    再会 请求页面时 cURL 的运行速度非常慢 我知道这不是所请求的页面 因为该页面立即返回到浏览器中 我注意到的两件事 starttransfer time 通常接近 20 local port 似乎每次都会改变 这正常吗 有时 cURL
  • 如何在 Freemarker 模板中访问 Spring 应用程序属性?

    我有使用 Spring 3 1 的 Java web 应用程序 以及用于渲染视图的 Freemarker 模板 我想根据特定应用程序属性的真 假值有条件地在视图中显示链接 我在中定义了以下应用程序属性src main resources a