Nat*_*ell 2 spring-webflow-2 thymeleaf
我想知道是否有人可以帮忙。我们正在将 Spring Webflow 2 应用程序从使用基于 jsp 的视图层转换为基于 Thymeleaf 的视图。
对于这大部分来说,这是可以的,但现在我正在努力让 Thymeleaf 访问我们放入servletContext.
因此,我们有一个对象被放入servletContextbean 的一部分(实现ServletContextAware和InitializingBean)
为了简单起见,我们假设它是一个字符串:
public class ReferenceDataBuilder implements ServletContextAware, InitializingBean {
public void setServletContext(ServletContext p_context) {
p_context.setAttribute("referenceData", "test text" );
}
Run Code Online (Sandbox Code Playgroud)
在基于 jsp 的视图中,我们可以referenceData像这样访问对象:
<p><c:out value="${referenceData}"/></p>
Run Code Online (Sandbox Code Playgroud)
借助 Spring EL 的魔力,它知道它可以访问的各种范围(servletContext、等),并且(我猜? flowScope)flashScope搜索每个范围,直到找到匹配的属性。结果是:
<p>test text</p>
Run Code Online (Sandbox Code Playgroud)
在视图中呈现。
在我们的 thymeleaf 模板中,我们尝试做同样的事情:
<p th:text="${referenceData}"/></p>
Run Code Online (Sandbox Code Playgroud)
但这只是返回一个空字符串。该视图呈现一个空字符串:
<p></p>
Run Code Online (Sandbox Code Playgroud)
(但我认为 EL 实际上是作为 null 返回的)
我非常确定,如果该referenceData对象是诸如flowScope或 之类的范围的属性flashScope,那么这将起作用 - 但它不是,它是servletContext.
有谁知道 thymeleaf 是否可以servletContext通过 EL 访问?也许我需要使用不同的语法?
干杯
内森
小智 7
您可以通过 #ctx 对象访问常用的地图,该对象的类型为SpringWebContext。
例如 #ctx.locale、#ctx.httpServletRequest.contextPath、#ctx.servletContext 甚至 Spring applicationContext 的#ctx.applicationContext。
您可以使用直接方法调用
<p th:text="${#ctx.servletContext.getAttribute('referenceData')}">Whatever</p>
Run Code Online (Sandbox Code Playgroud)
或 applicationAttributes 变量映射
<p th:text="${#ctx.servletContext.applicationAttributes.referenceData}">Whatever</p>
Run Code Online (Sandbox Code Playgroud)
或者使用 Spring 隐式对象来简化事件
<p th:text="${application.referenceData}">Whatever</p>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5454 次 |
| 最近记录: |