2015-11-02 82 views
1

我刚开始添加的Webflow到Spring MVC的项目,我让我的flow.xml组件此编译错误:春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。 没有人回答这个问题,但我发现它在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> 

该文档指出启动状态是可选的 - 第一个视图状态将被认为是开始。如果我将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
  • 春季安全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中。

回答

3

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

因此,我浏览了booking-mvc项目的属性,并将它们与我的项目进行了比较。我能看到的唯一相关差异是在Spring中Web Flow支持。我的项目列出了我的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

随着仅diffrence作为加成验证-提示的属性之间的差异。

不知道还有什么可以推断出来的。也许这是eclipse/STS在分析xsd文件时的一个错误。

正如罗森在SWF JIRA票表明在XSD每个子元素一个minOccurs定义=“0” https://jira.spring.io/browse/SWF-1646

所以我觉得这是不是一个SWF的问题,而是STS/Eclipse的解析问题。

+0

是流程正在执行。在应用程序中只有一个流程,它非常简单,总共只有4页。一切工作正常与2.0 xsd,但是当我去使用验证提示添加验证组时,我意识到我需要使用最新的xsd。那是错误出现的时候。我将用我的java配置文件中的一些摘录来编辑这个问题。谢谢。 – LWK69

0

我终于找到了解决方案。

Eclipse认为“缺少开始状态”,因为他认为XML是“Spring Web Flow Definition File”,但他错了。 解决方案是告诉Eclipse XML不是“Spring Web Flow定义文件”。

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

screenshot

相关问题