2011-05-09 122 views
0

我對Spring Webflow有問題。我流XML定義是:動態動作狀態的問題

<?xml version="1.0" encoding="UTF-8"?> 
<flow xmlns="http://www.springframework.org/schema/webflow" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/webflow 
     http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd" parent="changeLang"> 

    <input name="hash" required="true"/> 

    <action-state id="decideAction"> 
     <set name="flowScope.goTo" value ="verifyActionService.verifyHash(hash)" /> 
     <transition to="${goTo}" ></transition> 
    </action-state> 

    <view-state id="correctVerify" view="registered" model="userAddressesForm"> 
     <transition on="addPhoneNumber" to="correctVerify"> 
      <evaluate expression="verifyActionService.addPhoneNumber(userAddressesForm)" /> 
     </transition> 
     <transition on="deletePhoneNumber" to="correctVerify"> 
      <evaluate expression="verifyActionService.deletePhoneNumber(userAddressesForm, requestParameters.deleteNumber)" /> 
     </transition> 
    </view-state> 

    <view-state id="notCorrectVerify" view="register"></view-state> 

</flow> 

的方法verifyHash返回一個狀態ID等於 「correctVerify」 是這樣的:

public String verifyHash(String hash) { 
    return "correctVerify"; 
} 

當我運行它,一個得到一個錯誤這樣的:

at java.lang.Thread.run(Thread.java:662) 
Caused by: java.lang.IllegalArgumentException: Cannot find state with id '${goTo}' in flow 'verify' -- Known state ids are 'array<String>['decideAction', 'correctVerify', 'notCorrectVerify', 'start']' 
at org.springframework.webflow.engine.Flow.getStateInstance(Flow.java:348) 
at org.springframework.webflow.engine.support.DefaultTargetStateResolver.resolveTargetState(DefaultTargetStateResolver.java:60) 
at org.springframework.webflow.engine.Transition.execute(Transition.java:217) 
at org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(FlowExecutionImpl.java:391) 
at org.springframework.webflow.engine.impl.RequestControlContextImpl.execute(RequestControlContextImpl.java:214) 
at org.springframework.webflow.engine.TransitionableState.handleEvent(TransitionableState.java:119) 

任何人都可以幫助我嗎?

回答

1

transitionto屬性採用字符串文字。如果你想字符串和EL結合起來,你需要使用模板表達式:

<transition to="#{goTo}"/> 

對兩種不同類型的表達式的信息可以在文檔this部分找到。

另外,您確定需要從服務層返回視圖狀態名稱嗎? <action-state>的一般模式是使用<evaluate>調用方法,然後基於<evaluate>的結果定義到不同狀態的不同轉換...類似於switch語句。看看this關於行動狀態的部分。