0

我想知道是否有人可以提供帮助。我们正在将 Spring Webflow 2 应用程序从使用基于 jsp 的视图层转换为基于 Thymeleaf 的视图。

在大多数情况下,这是可以的,但现在我正在努力让 Thymeleaf 访问我们放在servletContext.

servletContext因此,我们有一个对象作为 bean的一部分放入(实现ServletContextAwareand InitializingBean

为了简单起见,假设它是一个字符串:

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 的魔力,它知道它可以访问的各种范围(servletContextflowScopeflashScope),并且(我猜?)搜索每个范围,直到找到匹配的属性。结果是:

<p>test text</p>

在视图中呈现。

在我们的 thymeleaf 模板中,我们正在尝试做同样的事情:

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

但这只是返回一个空字符串。视图呈现一个空字符串:

<p></p>

(但我认为 EL 实际上是作为 null 返回的)

我很确定如果该referenceData对象是一个范围的属性,例如flowScopeorflashScope这会起作用 - 但它不是,它是servletContext.

有谁知道百里香是否可以servletContext通过 EL 访问?也许我需要使用不同的语法?

干杯

弥敦道

4

1 回答 1

4

您可以通过类型为 SpringWebContext 的 #ctx 对象访问常用地图

例如 #ctx.locale、#ctx.httpServletRequest.contextPath、#ctx.servletContext 甚至是 Spring applicationContext 的 #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 回答