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一起使用?
答案 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 /”)。