带有 Spring WebFlow 的 Apache Tiles 通配符

Posted

技术标签:

【中文标题】带有 Spring WebFlow 的 Apache Tiles 通配符【英文标题】:Apache Tiles wildcard with Spring WebFlow 【发布时间】:2013-08-25 20:31:50 【问题描述】:

Apache Tiles 2.1.3 具有通配符功能,其中切片定义包含星号:

<definition name="flow/*" extends=".mainTemplate">
    <put-attribute name="header" value="/WEB-INF/jsp/header.jsp"  />
    <put-attribute name="body" value="/WEB-INF/jsp/flow/1.jsp"  />
</definition>

解释了here,但基本上这种布局用于“流”目录中的任何JSP。

问题是 Spring Webflow 使用 Tiles 产生了无限递归:

org.springframework.webflow.execution.FlowExecutionException: Exception thrown in state 'createAccount' of flow 'jsp/flow'
Caused by: java.lang.IllegalStateException: Exception occurred rendering view null
Caused by: java.lang.NullPointerException

我最终插入了许多单独的 Tiles 定义而不是一个通配符定义(在此处插入皱眉脸)。

Tiles 通配符如何与 Spring WebFlow 配合使用?

【问题讨论】:

Integrating Spring Webflow 2 and Apache Tiles的可能重复 这与您引用的问题不同 [link] (***.com/questions/334431/…) 我有 Webflow 和 Tiles “工作”,我问的是一个特定的功能,通配符。另一个问题甚至没有解决这个功能。如果不是,请不要将其标记为重复,因为这样人们就不再看它了。 很遗憾,我无法回答您为什么会失败,但它在我们的 Web Flow 2.3.0 应用程序和 Tiles 2.2.2 中绝对有效。 @dbreaux - 谢谢,这给了我一些希望。我将更新我的版本并仔细检查我的图块布局的语法。 【参考方案1】:

简单修复:您不能将默认 Web Flow 视图名称与通配符一起使用,因为您不能像这样创建通配符 Tiles 定义:

<definition name="*" extends=".flowTemplate">
    <put-attribute name="header" value="/WEB-INF/jsp/header.jsp"  />
    <put-attribute name="body" value="/WEB-INF/jsp/flow/1.jsp"  />
</definition>

如果您提供这样的纯“*”定义,Tiles 系统将进入(看似)无限循环:

name="*" 

这样做的方法是提供这样的定义:

<definition name="flow/*" extends=".flowTemplate">
    <put-attribute name="header" value="/WEB-INF/jsp/header.jsp"  />
    <put-attribute name="body" value="/WEB-INF/jsp/flow/1.jsp"  />
</definition>

然后将您的 Web Flow 视图名称强制为该表单,如下所示:

<view-state id="myView" model="myView" view="flow/myView">
    <transition on="back" to="previousView" />
    <transition on="next" to="nextView" />
</view-state>

默认视图名称是视图 ID,在本例中为“myView”。您不能为视图提供“flow/myView”的 id,但您可以使用

单独指定视图名称
view="flow/myView"

这会将正确的值提供给 Tiles 解析器。我确信 Tiles 视图命名和 Web Flow 视图分辨率还有其他问题,但这解决了我的问题。

确保引用正确的 URL(即,酌情注入“flow/”)。

【讨论】:

以上是关于带有 Spring WebFlow 的 Apache Tiles 通配符的主要内容,如果未能解决你的问题,请参考以下文章

带有 Hubspot 集成的 Webflow 弹出窗口

在 Spring MVC 之上使用 Spring WebFlow 啥时候有意义?

找不到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/webflow]

Spring Webflow - 决策状态与动作状态

关于spring webflow执行键的困惑,背后的语义是啥

spring-roo 2.0 Spring Webflow 持久性最佳实践