Spring веб-поток, создайте подпоток с полем ввода

Я начинаю с весеннего веб-потока, читаю и следую документации. Я создал новый поток:

test-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]]'

В чем может быть проблема?? Заранее спасибо.


person Blanca Hdez    schedule 06.06.2012    source источник
comment
Это выражение ожидает, что существует компонент Spring с идентификатором com.project.TestView. Так ли это? В этом исключении должно быть немного больше — трассировка стека, которая, вероятно, говорит вам, что оно было вызвано EvaluationExpression. Эта часть может быть проглочена любым вашим механизмом обработки исключений.   -  person kevin    schedule 14.06.2012


Ответы (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">

Если это не решит проблему, возможно, построитель потока не может найти состояние с именем «saveName». Проблема может быть в этой строке:

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

Если вы хотите вызвать подпоток, когда происходит событие «тест», вы пишете «подтест» вместо «saveName», чтобы вызвать подпоток.

Итак, эта строка должна быть:

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

Также обратите внимание, что вы не указываете какое-либо представление для этих состояний представления.

Надеюсь это поможет.

person txedo    schedule 06.06.2012