0

誰か助けてくれないかしら。現在、SpringWebflow2アプリケーションをjspベースのビューレイヤーの使用からThymeleafベースのビューに変換中です。

このほとんどの部分でこれは問題ありませんが、Thymeleafがに配置したオブジェクトにアクセスできるようにするのに苦労していますservletContext

つまり、servletContextBeanの一部としてに配置されるオブジェクトがあります(実装ServletContextAwareInitializingBean

簡単にするために、それが文字列であるとしましょう:

public class ReferenceDataBuilder implements ServletContextAware, InitializingBean {

public void setServletContext(ServletContext p_context) {
    p_context.setAttribute("referenceData", "test text" );
}

jspベースのビューでは、次のreferenceDataようにオブジェクトにアクセスできます。

<p><c:out value="${referenceData}"/></p>

Spring ELの魔法により、アクセスできるさまざまなスコープ(、、servletContextなど)を認識しflowScopeflashScope(推測しますか?)一致するプロパティが見つかるまで各スコープを検索します。結果は次のとおりです。

<p>test text</p>

ビュー内にレンダリングされます。

thymeleafテンプレートでは、同じことを行おうとしています。

<p th:text="${referenceData}"/></p>

しかし、これは単に空の文字列を返します。ビューは空の文字列をレンダリングします。

<p></p>

(しかし、ELは実際にはnullとして返されていると思います)

referenceDataオブジェクトが次のようなスコープのプロパティである場合、flowScopeまたはこれが機能する場合は、かなり確信していますが、flashScopeそうではなく、のプロパティですservletContext

thymeleafがservletContextEL経由でアクセスできるかどうか誰かが知っていますか?おそらく、私が使用する必要のある別の構文がありますか?

乾杯

ネイサン

4

1 に答える 1

4

SpringWebContextタイプの#ctxオブジェクトを介して通常のマップにアクセスできます。

たとえば、Spring applicationContextの場合は#ctx.locale、#ctx.httpServletRequest.contextPath、#ctx.servletContext、さらには#ctx.applicationContextです。

直接メソッド呼び出しを使用できます

<p th:text="${#ctx.servletContext.getAttribute('referenceData')}">Whatever</p>

またはapplicationAttributes変数マップ

<p th:text="${#ctx.servletContext.applicationAttributes.referenceData}">Whatever</p>

またはSpring暗黙オブジェクトを使用してより単純なイベント

<p th:text="${application.referenceData}">Whatever</p>
于 2012-12-19T16:17:34.927 に答える