Spring Web flow,使用输入字段创建子流

时间:2012-06-06 09:18:24

标签: spring-webflow

我从春季网络流程开始,阅读并遵循文档。我创建了一个新的流程:

测试flow.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">

    <var name="testName" class="com.project.TestView" />

    <view-state id="test">
        <on-entry>
            <set name="flowScope.name" value="testName.name" />
        </on-entry>
        <transition on="test" to="saveName"/>
    </view-state>

    <subflow-state id="subTest" subflow="testSub-flow">
        <input name="nameVar" value="name" />
        <transition to="error" />
    </subflow-state>

    <view-state id="error" />
    <end-state id="finish" />   
</flow>

我正在尝试创建 testSub-flow.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">

    <input type="String" name="nameVar" />

    <on-start>
        <evaluate expression="com.project.TestView.printSomething(nameVar)" result="flowScope.testPrint" />
    </on-start>

    <view-state id="printTest" >
        <transition on="restart" to="endSub" />
    </view-state>

    <end-state id="endSub" />

</flow>

调用的方法是:

@Transactional(readOnly = true)
    public String printSomething(String text){
        System.out.print(text + " this is a test");
        return text + " this is a test";
    }

在加载主流test-flow.xml

时,我在浏览器中遇到一些异常
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.webflow.execution.ActionExecutionException: Exception thrown executing [AnnotatedAction@6ca837 targetAction = [EvaluateAction@7aed3a expression = com.project.TestView.printSomething(nameVar), resultExpression = flowScope.testPrint], attributes = map[[empty]]] in state 'null' of flow 'test' -- action execution attributes were 'map[[empty]]'

可能是什么问题?提前谢谢。

1 个答案:

答案 0 :(得分:1)

乍一看,它似乎找不到任何启动状态。尝试在流标记中添加start-state属性:

    <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" 
            start-state="test">

如果这不能解决问题,那么流构建器可能无法找到名为&#34; saveName&#34;的状态。问题可能出在这一行:

<transition on="test" to="saveName"/>

如果你想在&#34; test&#34;时调用子流程。事件发生,你写&#34; subTest&#34;而不是&#34; saveName&#34;为了调用子流程。

所以,那一行应该是:

<transition on="test" to="subTest"/>

另请注意,您没有为这些视图状态指定任何视图。

希望这有帮助。