2013-08-22 10 views
7

Apache Tiles 2.1.3 ha una caratteristica jolly in cui una definizione piastrelle include un asterisco:Apache Tiles jolly con la Primavera 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> 

E 'spiegato here, ma fondamentalmente questo layout viene utilizzato per qualsiasi JSP nel "flusso "directory.

Il problema è Spring WebFlow prodotta ricorsione infinita con piastrelle:

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 

Finii inserendo molte definizioni singole tessere invece di una definizione wildcarded (inserire faccia frowny qui).

Come funzionano i caratteri jolly di Tiles con Spring WebFlow?

+0

possibile duplicato di [Integrazione di Spring Webflow 2 e Apache Tiles] (http://stackoverflow.com/questions/334431/integrating-spring-webflow-2-and-apache-tiles) –

+8

Questo non è lo stesso del domanda fai riferimento [link] (http://stackoverflow.com/questions/334431/integrating-spring-webflow-2-and-apache-tiles) Ho "flusso" di Webflow e Tiles, sto chiedendo di una caratteristica particolare, caratteri jolly. L'altra domanda non riguarda nemmeno questa funzione. Per favore, non contrassegnare qualcosa come duplicato se non lo è, perché poi la gente smette di guardarlo. – user1071914

+0

Purtroppo, non riesco a rispondere perché non funziona per voi, ma sicuramente funziona qui nella nostra applicazione Web Flow 2.3.0 con Tiles 2.2.2. dbreaux

risposta

6

fix semplice: non è possibile utilizzare i nomi delle viste del flusso Web predefinito con caratteri jolly perché non è possibile creare un jolly definizione Piastrelle in questo modo:

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

Il sistema Tiles va in un (apparentemente) ciclo infinito se fornisci una definizione pura "*" come questo:

name="*" 

Il modo per farlo è quello di fornire una definizione del genere:

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

E poi forzare i vostri nomi Guarda Flow Web a quella forma, in questo modo: nome della vista

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

Il valore predefinito è l'id della vista, in questo caso "myView". Non si può dare la vostra vista un id di "flusso/myView", ma è possibile specificare il nome della vista separatamente

view="flow/myView" 

e che alimenterà il valore corretto per il resolver Tiles. Sono sicuro che ci sono ulteriori grinze per la visualizzazione delle tessere e la risoluzione della vista del Web, ma questo ha risolto il mio problema.

Assicurarsi di fare riferimento all'URL corretto (ad esempio, immettere "flusso /" come appropriato).