我需要访问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属性也会出现相同的错误,所以我知道这不是属性丢失的事实。我做错了什么或者有其他办法吗?
答案 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并在所有模板中使用它非常方便。