【问题标题】:Spring Webflow 2.4.2 missing start stateSpring Webflow 2.4.2 缺少启动状态
【发布时间】:2016-02-01 21:18:35
【问题描述】:

我刚开始将 Webflow 添加到 Spring MVC 项目中,但我的 flow.xml 组件上出现了这个编译错误:

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。 没有人回答这个问题,但我在 Spring Webflow 的 Jira 存储库中找到了它: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>

文档表明 start-state 是可选的 - 第一个 view-state 将被假定为开始。如果我将 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
  • Spring 4.1.6.RELEASE
  • Spring WebFlow 2.4.2.RELEASE
  • Spring Security 4.0.2.RELEASE
  • Java 1.7
  • 休眠 4.3.10.FINAL

我对所有内容都使用基于 java 的配置,但我认为这不是问题所在,除非 Webflow 2.4.2 所需的版本不匹配?如果有帮助,我可以发布我的 WebMvcConfig 和 WebFlowConfig 或 pom.xml 或任何其他信息。

任何帮助将不胜感激。

编辑 #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,所有页面都以正确的顺序执行。

编辑#2

我忘了提到,即使出现 2.4 xsd 编译错误,webflow 也会执行,与一年前的帖子相同。我还发现了关于 STS 的这个问题:webflow config gives incorrect "Start state definition is missing." error。指示的修复版本是 3.3.0.M1,所以我假设(?)修复仍然包含在 STS 3.6.4 中。

【问题讨论】:

    标签: spring spring-mvc spring-webflow spring-webflow-2


    【解决方案1】:

    我花了几个小时尝试所有我能想到的东西,包括用 booking-mvc 示例项目中的 pom.xml 的内容替换 pom.xml 中的几乎所有内容,尽管它也没有显示这个错误设置为版本 2.4.2。由于 webflow 似乎与 Thymeleaf 和 Tiles (我没有使用)相关联,我认为这些项目中可能存在可以消除错误的依赖项。没有。

    所以我查看了 booking-mvc 项目的属性并将它们与我的进行了比较。我能看到的唯一相关区别是在 Spring |网络流支持。我的项目列出了我的 recipe-flow.xml,但 booking-mvc 没有显示它的 -flow.xml 文件。一旦我删除了我的 flow.xml 文件,错误就消失了。

    我不知道文件是如何在这个配置位置结束的,我找不到任何关于这个属性的文档,但显然这是一个禁忌,至少在我的项目中是这样。我的 pom.xml 花了一段时间才恢复正常,但该应用现在又可以正常工作了。

    【讨论】:

    • 对我来说也一样。已将方案从 2.0 更改为 2.4,并删除了属性中的流支持 - 有效。
    【解决方案2】:

    这里是2.0和2.4 xsd的区别

    http://diffchecker.com/oqx5rq7t

    唯一的区别是添加了验证提示属性。

    不确定还能从中推断出什么。也许这是 eclipse/STS 解析 xsd 文件的方式的一个错误。

    正如罗森在 SWF jira 票证中指出的那样,xsd 中的每个子元素都使用 minOccurs="0" https://jira.spring.io/browse/SWF-1646 定义。

    所以我认为这不是 SWF 问题,而是 STS/Eclipse 解析问题。

    【讨论】:

    • 是的,流程正在执行。应用程序中只有一个流程,非常简单,总共只有 4 个页面。 2.0 xsd 一切正常,但是当我使用验证提示添加验证组时,我意识到我需要使用最新的 xsd。这时候错误就出现了。我将使用我的 java 配置文件中的一些摘录来编辑问题。谢谢。
    【解决方案3】:

    我终于找到了解决办法。

    Eclipse 认为“缺少启动状态”是因为他认为 XML 是“Spring Web Flow Definition File”,但他错了。 解决方案是告诉 Eclipse XML 不是“Spring Web Flow Definition File”。

    打开“Spring Explorer”,你会发现“Web Flow”中显示的XML,右键单击并选择“Properties”,可以看到XML在“Web Flow Support / Config Files”列表中。只需将其删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-08
      • 2012-08-13
      • 1970-01-01
      • 2016-07-26
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多