我刚刚开始将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>
文档表明启动状态是可选的 - 第一个视图状态将被假定为开始。如果我将spring-webflow-2.4.xsd更改为2.0,则错误消失,但如果我尝试在任何视图状态条目上使用validation-hints,则会出现不同的错误。 &#34; Basic1&#34;和&#34; Basic2&#34;在下面的示例中是配方模型上的验证组。
<view-state id="basics" view="recipe/basics" model="recipe" validation-hints="'basic1,basic2'">
我正在使用
我使用基于java的配置来处理所有问题,但除非我在Webflow 2.4.2所要求的版本中存在不匹配,否则我不认为问题出在哪里?我可以发布我的WebMvcConfig和WebFlowConfig或pom.xml或任何其他信息,如果这将有所帮助。
非常感谢任何帮助。
编辑#1:摘自java config
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中。
答案 0 :(得分:4)
我花了好几个小时尝试了我能想到的一切,包括使用来自booking-mvc示例项目的pom.xml中的内容替换pom.xml中的几乎所有内容,尽管它也没有显示此错误设置为2.4.2版。由于webflow似乎与Thymeleaf和Tiles(我没有使用)相关联,我认为在那些可以消除错误的项目中可能存在依赖关系。没有。
所以我浏览了预订-mvc项目的属性,并将它们与我的相比较。我能看到的唯一相关区别在于Spring Web流量支持。我的项目列出了我的recipe-flow.xml,但是booking-mvc没有显示它的-flow.xml文件。删除flow.xml文件后,错误消失了。
我不知道文件是如何在此配置位置结束的,我无法找到有关此属性的用途的任何文档,但显然它是禁止的,至少在我的项目中。我花了一段时间让我的pom.xml重新恢复状态,但应用程序现在又恢复了工作。
答案 1 :(得分:1)
以下是2.0和2.4 xsd的差异
http://diffchecker.com/oqx5rq7t
唯一的差异是增加了validation-hints属性。
不确定还能从中推断出什么。也许这是eclipse / STS的一个错误,它解析了xsd文件。
正如Rossen在SWF jira票证中指出的那样,xsd中的每个子元素都定义为minOccurs =“0”https://jira.spring.io/browse/SWF-1646
所以我认为这不是SWF问题,而是STS / Eclipse解析问题。
答案 2 :(得分:1)
我终于找到了解决方案。
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”列表中。只需删除它。