2011-01-05 2 views
7

나는 표현식을 평가 한 다음 그 결과에 따라 다른 여러 상태로 전환하는 활동 - 상태를가집니다. 결과 상태 중 하나는 제어를 다른 플로우로 전달하는 하위 플로우 상태입니다 (예 :스프링 웹 플로우 : 전환하는 동안 하나의 흐름에서 다른 흐름으로 속성을 전달하려면 어떻게해야합니까?

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

당신은 내가 입력 태그를 통해 서브 플로우에 입력을 전달할 수 있지만, 내 질문에 내가 지정하고 내가하고 하위 흐름 상태가 현재 호출되는 경우에만 경우 할 추가 입력을 전달할 수있는 방법입니다 볼 수 있듯이 과도기 WORKFAIL에서? 서브 플로우 - 상태 "fixFail"이 다른 조치 상태에서 호출 될 수 있다고 가정하십시오.

나는 효과가없는 다음과 유사한 것을 시도했다.

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

답변

13

세 가지 방법이 있습니다. 당신은 전달 속성 대화, 세션을 통해 또는 그것을 할 수

  • ConversationScope이 :. 필드가 conversationScope에있는 경우 필드가 특정 흐름뿐만 아니라 그 흐름의 하위 흐름 (및 전환 어디서나 볼 수 있습니다)

  • SessionScope는 (아마 당신은 희망)은 모든 흐름과
    자신의 서브 플로우

마지막에 보이지 않는 무엇을 LY 당신은 someNumber 및 someNumber이 당신의 서브 플로우에 속성으로 전달되는이 예에서는 사용자의 서브 플로우의 XML

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

에서 예를

의 하위 흐름 상태로 속성으로
<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> 

을 현장을 전달할 수 있습니다. 어떤에서 당신은 ${someNumber}

편집로 평가할 수 :

이것은 당신의 코멘트 질문을 해결하는 것입니다. 특정 전환에 대화 범위에서 변수를 설정하고 싶다면 당신은 할 수 있습니다 : 다음

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

당신의 JSP

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

흠 conversationScope은 내가 생각이 경우 원하는 같은 소리에. 세션이 처음으로 끝나면 사용자가 이러한 흐름을 반복하면서 어떤 세션 속성이 유지 될지를 세션에 동의합니다. 사용자 인터페이스에서 주 플로우가 끝나면 대화 범위 범위 속성이 사라지고 사용자가 주 플로우를 두 번째 입력 한 경우 존재하지 않을 것입니다. on = "WORKFAIL"전환에서 conversationScope에 추가 할 수있는 방법이 있습니까? 내가 작업을 자바 코드에 추가하는 대신 xml/jsps에 보관하고 싶습니다. –

+0

@Nick Foote - 질문에 대답하기 위해 제 편집을보세요 –

+0

jsp에서 $ {converationScope.someVariable}과 같은 모든 종류의 것을 시도해 보았을 때 치료가 효과가있는 건배! –

관련 문제