2011-01-05 13 views
7

Ich habe einen Aktionszustand, der einen Ausdruck auswertet und dann je nach Ergebnis in verschiedene andere Zustände übergeht. Einer der Ergebniszustände ist ein Subflow-State, der die Kontrolle an einen anderen Flow übergibt, Beispiel;Spring Webflow: Wie übergebe ich ein Attribut während eines Übergangs von einem Flow zu einem anderen?

<action-state id="doWork"> 
    <evaluate expression="someAction.doWork(someInput)" /> 
<transition on="WORKSUCCESS" to="workSuccess" /> 
<transition on="WORKFAIL" to="fixFail" /> 
</action-state> 

<subflow-state id="fixFail" subflow="someOtherPlace/someOtherWorkToFixFail"> 
    <input name="someNumber" value="1" type="java.lang.Integer" /> 
    <transition on="finish" to="workSuccess" /> 
</subflow-state> 

Wie man sehen kann ich einen Eingang in die Subflow über den Input-Tag passieren kann, aber meine Frage ist, wie kann ich zusätzliche Eingänge angeben und übergeben, die ich anwesend wollen, wenn und nur wenn der Subflow-Zustand aufgerufen wird vom Übergang WORKFAIL? Angenommen, der Subflow-Status "fixFail" kann von anderen Aktionszuständen aufgerufen werden.

Ich habe Dinge ähnlich wie folgt ohne Wirkung versucht;

<action-state id="doWork"> 
    <evaluate expression="someAction.doWork(someInput)" /> 
<transition on="WORKSUCCESS" to="workSuccess" /> 
<transition on="WORKFAIL" to="fixFail"> 
      <attribute name="newInput" value="3000" type="java.lang.Integer" /> 
    </transition> 
</action-state> 

<subflow-state id="fixFail" subflow="someOtherPlace/someOtherWorkToFixFail"> 
    <input name="someNumber" value="1" type="java.lang.Integer" /> 
    <input name="someNumber2" value="flowScope.newInput" type="java.lang.Integer" /> 
    <transition on="finish" to="workSuccess" /> 
</subflow-state> 

Antwort

13

Es gibt drei Möglichkeiten, wie Sie dies tun können. Sie können es durch das Gespräch, Sitzung oder als Attribut in geben

  • ConversationScope. Wenn ein Feld in den conversationScope das Feld sichtbar ist überall in dieser spezifischen Strömung als auch die Strömung des Subflows (und deren Übergänge

    )
  • SessionScope: (Wahrscheinlich nicht, was Sie wollen ) ist sichtbar für alle Strömungen und
    ihre Subflows

Finale ly können Sie das Feld als Attribut in den Subflow Zustand für

Beispiel passieren
<subflow-state id="fixFail" subflow="someOtherPlace/someOtherWorkToFixFail"> 
    <input name="someNumber" value="1" type="java.lang.Integer" /> 
    <input name="someNumber2" value="flowScope.newInput" type="java.lang.Integer" /> 
    <transition on="finish" to="workSuccess" /> 
</subflow-state> 

In xml Ihren Subflow der

<?xml version="1.0" encoding="UTF-8"?> 
<flow> 
    <input name="someNumber"/> 
    <input name="someNumber2"/> 
    ... 
</flow> 

In diesem Beispiel somenumber und somenumber zwei in als Attribut zu Ihrem Subflow übergeben werden. In dem man sie als ${someNumber}

bearbeiten bewerten:

Dies ist Ihr Kommentar Frage zu beantworten. Wenn Sie eine Variable im Gespräch Bereich auf einem bestimmten Übergang setzen wollen Sie tun können:

<transition on="WORKFAIL" to="fixFail" > 
    <set name="conversationScope.someVariable" value="Hello World"/> 
</transition> 

Dann in Ihrem jsp

${someVariable} <!-- This will print out 'Hello World' --> 
+0

Hmmm der conversationScope klingt wie das, was ich in diesem Fall möchte ich denke. Ich stimme zu, dass die Sitzung das ist, was ich möchte, wenn der Benutzer diese Abläufe wiederholt, sobald sie das erste Mal beendet haben und alle Sitzungsattribute bleiben würden, nicht wahr? Wo würden Conversation-Scoped-Attribute verschwinden, wenn der Hauptfluss beendet ist und nicht vorhanden wäre, wenn der Benutzer den Hauptfluss ein zweites Mal eingeben würde, richtig? Gibt es eine Möglichkeit, dem conversationScope im Übergang on = "WORKFAIL" hinzuzufügen? Ich würde es gerne in der xml/jsps behalten, anstatt den Java-Code der Aktion hinzuzufügen. –

+0

@Nick Foote - werfen Sie einen Blick auf meine Bearbeitung, um Ihre Frage zu beantworten –

+0

Prost, die ein Leckerbissen funktioniert, so offensichtlich, wenn Sie es sehen, ich versuchte alle möglichen Dinge wie $ {conventionScope.someVariable} in der JSP! –

Verwandte Themen