使用Spring WebFlow的Apache Tiles通配符

时间:2013-08-22 22:28:54

标签: java jsp spring-webflow tiles

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

<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,但基本上这个布局用于&#34; flow&#34;中的任何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一起使用?

1 个答案:

答案 0 :(得分:6)

简单修复:您不能将默认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 /”)。