带有 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 中绝对有效。简单修复:您不能将默认 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 通配符的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring MVC 之上使用 Spring WebFlow 啥时候有意义?
找不到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/webflow]