2011-01-05 28 views
7

Tôi có trạng thái tác vụ đánh giá biểu thức và sau đó chuyển tiếp sang các trạng thái khác tùy thuộc vào kết quả. Một trong các trạng thái kết quả là một trạng thái luồng phụ kiểm soát một luồng khác, ví dụ;Spring Webflow: làm cách nào để chuyển thuộc tính từ luồng này sang luồng khác trong quá trình chuyển đổi?

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

Như bạn thấy tôi có thể vượt qua một đầu vào cho subflow qua thẻ đầu vào nhưng câu hỏi của tôi là làm thế nào tôi có thể xác định và vượt qua đầu vào bổ sung mà tôi muốn có mặt khi và chỉ khi subflow nhà nước đang được gọi là từ quá trình chuyển đổi WORKFAIL? Giả sử trạng thái dòng phụ "fixFail" có thể được gọi từ các trạng thái hành động khác.

Tôi đã thử những thứ tương tự như sau không có hiệu lực;

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

Trả lời

13

Có ba cách bạn có thể thực hiện việc này. Bạn có thể làm điều đó thông qua cuộc nói chuyện, phiên làm việc hoặc như là thuộc tính thông qua vào

  • ConversationScope:. Nếu một lĩnh vực đang trong conversationScope lĩnh vực có thể nhìn thấy bất cứ nơi nào trong đó dòng chảy cụ thể cũng như subflows của dòng đó (và hiệu ứng chuyển tiếp của họ)

  • SessionScope: (Có lẽ không phải những gì bạn muốn) là có thể nhìn thấy tất cả các luồng và
    subflows họ

cuối cùng ly bạn có thể vượt qua lĩnh vực này như một thuộc tính vào tình trạng subflow ví dụ

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

Trong xml của subflow bạn

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

Trong ví dụ này someNumber và someNumber hai được thông qua tại như các thuộc tính để subflow của bạn. Trong đó bạn có thể đánh giá chúng như ${someNumber}

Edit:

Điều này là để giải quyết câu hỏi nhận xét của bạn. Nếu bạn muốn thiết lập một biến trong phạm vi trò chuyện trên một sự chuyển tiếp cụ thể mà bạn có thể làm:

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

Sau đó, trong jsp của bạn

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

Hmmm các conversationScope âm thanh như những gì tôi muốn trong trường hợp này tôi nghĩ. Tôi đồng ý phiên là những gì tôi muốn khi người dùng lặp lại các luồng này khi họ hoàn thành lần đầu tiên và bất kỳ thuộc tính phiên nào sẽ vẫn không phải là họ? Trường hợp các thuộc tính phạm vi cuộc hội thoại sẽ biến mất khi luồng chính kết thúc và sẽ không có mặt nếu người dùng đã nhập luồng chính lần thứ hai, đúng không? Có cách nào để thêm vào cuộc hội thoạiScope trong quá trình chuyển đổi trên = "WORKFAIL" không? Tôi muốn giữ nó trong xml/jsps thay vì thêm vào mã Java của hành động. –

+0

@Nick Foote - hãy xem bản chỉnh sửa của tôi để trả lời câu hỏi của bạn –

+0

Chúc vui vẻ khi bạn thấy nó, tôi đã thử tất cả những thứ như $ {converationScope.someVariable} trong jsp !! –

Các vấn đề liên quan