2015-11-02 8 views
1

Я только начал добавлять WebFlow в проект Spring MVC, и я получаю эту ошибку компиляции на моем flow.xml компонента:Spring WebFlow 2.4.2 без вести начальное состояние

Start state is missing. Add at least one state to the flow 

Я нашел идентичное сообщение на SO от года назад: webflow.xsd - Start state is missing. Add at least one state to the flow. Никто не ответил на этот вопрос, но я нашел его в репозитории Jira для Spring Webflow: webflow.xsd - Start state is missing. Add at least one state to the flow. Он отмечен как «Невозможно воспроизвести».

Вот выдержка из моего очень простого 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.4.xsd"> 

    <on-start> 
     <evaluate expression="recipeService.createRecipe(currentUser.name)" result="flowScope.recipe" /> 
    </on-start> 

    <view-state id="basics" view="recipe/basics" model="recipe"> 
     <transition on="proceed" to="ingredients"></transition> 
     <transition on="cancel" to="cancel"></transition> 
    </view-state> 

    ... more states ... 

    <end-state id="end" view="recipe/end"/> 
    <end-state id="cancel" view="recipe/end"/> 

    </flow> 

Документация указывает, что начальное состояние не является обязательным - считается, что первым состоянием вида считается начало. Если я изменю Spring-webflow-2.4.xsd на 2.0, ошибка исчезнет, ​​но тогда я получаю другую ошибку, если я попытаюсь использовать подсказки проверки для любой из записей состояния представления. «Basic1» и «Basic2» в приведенном ниже примере являются группами проверки в модели рецепта.

<view-state id="basics" view="recipe/basics" model="recipe" validation-hints="'basic1,basic2'"> 

Я использую

  • STS 3.6.4
  • пружине 4.1.6.RELEASE
  • Spring WebFlow 2.4.2.RELEASE
  • Spring Security 4.0.2.RELEASE
  • Java 1.7
  • Hibernate 4.3.10.FINAL

Я использую конфигурацию на основе java для всего, но я не думаю, что это проблема, если у меня нет несоответствия в версиях, которые требует Webflow 2.4.2? Я могу опубликовать свои WebMvcConfig и WebFlowConfig или pom.xml или любую другую информацию, если это поможет.

Любая помощь будет принята с благодарностью.

EDIT # 1: отрывки из Java конфигурации

From WebFlowConfig.java: 
    @Bean 
    public FlowDefinitionRegistry flowRegistry() { 
     return getFlowDefinitionRegistryBuilder(flowBuilderServices()) 
      .setBasePath("/WEB-INF/views") 
      .addFlowLocationPattern("/**/*-flow.xml") 
      .build();    
    } 

    From WebMvcConfig.java 
    @Override 
    public void addViewControllers(final ViewControllerRegistry registry) { 
     super.addViewControllers(registry); 
     registry.addViewController("/recipe/basics.htm");   
     registry.addViewController("/recipe/ingredients.htm"); 
     registry.addViewController("/recipe/instructions.htm"); 
     registry.addViewController("/recipe/optional.htm"); 
     registry.addViewController("/recipe/end.htm"); 
    } 

Используя 2.0 все страницы будут выполнены в правильном порядке.

EDIT # 2

Я забыл упомянуть, что даже с 2.4 XSD ошибка компиляции WebFlow действительно получить выполняется, так же, как и в пост от года назад. Я также нашел эту проблему относительно STS: webflow config gives incorrect "Start state definition is missing." error. Указанная версия исправления - 3.3.0.M1, поэтому я бы предположил (?), Что исправление по-прежнему включено в STS 3.6.4.

ответ

3

Я потратил несколько часов на то, чтобы все, что я мог придумать, включая замену почти всего в pom.xml содержимым pom.xml из проекта sample-mvc, который не отображал эту ошибку, несмотря на то, устанавливается на версию 2.4.2. Поскольку веб-поток, похоже, связан с Thymeleaf и Tiles (который я не использую), я думал, что в тех проектах может быть зависимость, которая устраняет ошибку. Не было.

Итак, я просмотрел свойства проекта mvc и сравнил их с моим. Единственное различие, которое я мог видеть, было весной | Поддержка веб-потока. Мой проект перечислил мой recipe-flow.xml, но booking-mvc не отобразил файл -flow.xml. Как только я удалил файл flow.xml, ошибка исчезла.

enter image description here

Я понятия не имею, как файл оказался в этом конфигурационном месте, и я не могу найти какую-либо документацию о том, что это свойство для, но, видимо, это нет-нет, по крайней мере, в моем проекте , Потребовалось некоторое время, чтобы вернуть pom.xml в форму, но приложение теперь работает снова.

+0

То же самое для меня. Изменили схему от 2.0 до 2.4 и удалили поддержку потока в свойствах - работает. –

1

Вот различие между 2,0 и 2,4 XSD-х

http://diffchecker.com/oqx5rq7t

с единственным разностным являющимся добавлением валидации намеков атрибута.

Не уверен, что еще можно вывести из этого. Возможно, это ошибка с eclipse/STS в том, как она анализирует файлы xsd.

Как Росен указано в Jira билет SWF каждый суб элемент в XSD определяется с MinOccurs = «0» https://jira.spring.io/browse/SWF-1646

, так что я думаю, что это не проблема SWF, но СТС/Eclipse, разбор вопроса.

+0

Да, поток выполняется. В приложении есть только один поток, и он «очень простой», всего всего 4 страницы. Все работало нормально с 2.0 xsd, но когда я пошел добавлять группы проверки, используя подсказки проверки, я понял, что мне нужно использовать последнюю версию xsd. Вот тогда и появилась ошибка. Я отредактирую вопрос с некоторыми выдержками из моих конфигурационных файлов java. Благодарю. – LWK69

0

Я наконец нашел решение.

Eclipse считает, что «Начальное состояние отсутствует», потому что он считает, что XML является «файлом определения потока в Spring Web», но он ошибается. Решение состоит в том, чтобы сказать Eclipse, что XML не является «файлом определения потока весны».

Откройте «Весенний проводник», вы найдете XML, показанный в «Веб-потоке», щелкните правой кнопкой мыши и выберите «Свойства», вы можете увидеть, что XML находится в списке «Поддержка веб-потока/Config Files». Просто удалите его.

screenshot