2013-08-22 60 views
7

的Apache 2.1.3瓷砖瓷砖阿帕奇通配符有一个通配符功能,其中一个瓦片定义包括一个星号:与Spring Webflow的

<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此布局“ 目录。

问题是春季Webflow的生产与瓷砖无限递归:

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 

我结束了插入,而不是一个通配符定义许多单独的瓷砖定义(此处插入frowny面)。

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

+0

[集成Spring Webflow 2和Apache Tiles]可能的副本(http://stackoverflow.com/questions/334431/integrating-spring-webflow-2-and-apache-tiles) –

+8

这不是一样的问题你参考[链接](http://stackoverflow.com/questions/334431/integrating-spring-webflow-2-and-apache-tiles)我有Webflow和瓷砖“工作”,我问一个特定的功能,通配符。另一个问题甚至没有解决这个问题。如果不是重复的,请不要标记为重复的内容,因为这样人们就不再看它了。 – user1071914

+0

遗憾的是,我无法回答为什么它会失败,但它肯定在我们的Web Flow 2.3.0应用程序中使用Tiles 2.2.2。 <定义名称=“重复/ *”扩展=“duplicateBase”> dbreaux

回答

6

简单的解决方法:你不能用通配符使用默认的Web Flow视图名称,因为你不能创建一个通配符瓷砖的定义是这样的:

<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> 

瓷砖系统进入,如果你提供了(貌似)无限循环一个纯粹的“*”的定义是这样的:

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> 

然后迫使你的网站流量视图名称到形式,像这样:

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

的默认视图名称是视图id,在这种情况下,“MyView的”。你不能给你的看法“流量/ MyView的”的ID,但你可以用

view="flow/myView" 

分别指定视图名称,并且将饲料正确的值到瓷砖解析器。我确信Tiles视图命名和Web Flow视图分辨率有额外的皱纹,但是这解决了我的问题。

请务必引用正确的URL(即根据需要注入“flow /”)。

相关问题