2011-05-09 69 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关于行动状态的部分。