2015-11-02 346 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

相關問題