如何在Thymeleaf模板中访问系统属性?

时间:2014-02-12 11:05:10

标签: java spring spring-mvc thymeleaf spring-el

我需要访问Thymeleaf模板中的系统属性。如果这是可能的,那将是很好的,这样我就不必使用属性显式填充spring mvc模型。我正在尝试将SPEL用于此目的,但它无法正常工作。

<h2 th:text="${ systemProperties['serverName'] }">Service name</h2>

<h2 th:text="*{ systemProperties['serverName'] }">Service name</h2>

这两个都给了我:

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1012E:(pos 17): Cannot index into a null value

即使我尝试访问jdk属性也会出现相同的错误,所以我知道这不是属性丢失的事实。我做错了什么或者有其他办法吗?

2 个答案:

答案 0 :(得分:54)

我用

${@environment.getProperty('myPropertyName')}

答案 1 :(得分:1)

链接@Sudarshan_SMD发布给了我一个想法,我终于让它工作如下。

将以下bean放在spring上下文中。

<bean id="sysprops" class="java.lang.System" factory-method="getProperties" />

然后在你的百里叶模板中如下access the bean directly

${@sysprops['yourPropertyName']}

这是有效的,因为@sysprops允许直接访问bean和bean,即java.lang.System,它扩展了java.util.Hashtable,因此允许基于密钥的访问,而不是基于函数调用的访问。这样做也意味着您只需要定义一次这个bean并在所有模板中使用它非常方便。