web-dev-qa-db-ja.com

Thymeleafテンプレートのシステムプロパティにアクセスするにはどうすればよいですか?

Thymeleafテンプレートのシステムプロパティにアクセスする必要があります。これが可能であれば、SpringMVCモデルにプロパティを明示的に入力する必要がないので便利です。この目的で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プロパティにアクセスしようとしても同じエラーが発生するため、プロパティが欠落しているわけではないことがわかります。私は何を間違っているのですか、それともこれを行う別の方法がありますか?

15
junkie

私が使う

${@environment.getProperty('myPropertyName')}
56
Dave Bower

@Sudarshan_SMDが投稿したリンクからアイデアが浮かび、ついにこれを以下のように機能させることができました。

次のBeanをSpringコンテキストに配置します。

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

次に Beanに直接アクセスします thymeleafテンプレートで次のようにします。

${@sysprops['yourPropertyName']}

これが機能するのは、@ syspropsがBeanへの直接アクセスを許可し、Bean(Java.lang.System)がJava.util.Hashtableを拡張するため、関数呼び出しベースのアクセスではなく、キーベースのアクセスを許可するためです。このようにすることは、このBeanを一度定義するだけで、すべてのテンプレートで使用できることを意味します。これは非常に便利です。

1
junkie