Grails 1.1 GSP 子流程和会话

Grails的Web Flow集成同样支持子流(subflows)。一个子流在一个流中就像一个流。

拿下面search流作为示例:def searchFlow = { displaySearchForm { on("submit").to "executeSearch" } executeSearch { action { [results:searchService.executeSearch(params.q)] } on("success").to "displayResults" on("error").to "displaySearchForm" } displayResults { on("searchDeeper").to "extendedSearch" on("searchAgain").to "displaySearchForm" } extendedSearch { subflow(extendedSearchFlow) // <--- extended search subflow on("moreResults").to "displayMoreResults" on("noResults").to "displayNoMoreResults" } displayMoreResults() displayNoMoreResults() } 它在extendedSearch状态中引用了一个子流。子流完全是另一个流 : def extendedSearchFlow = { startExtendedSearch { on("findMore").to "searchMore" on("searchAgain").to "noResults" } searchMore { action { def results = searchService.deepSearch(ctx.conversation.query) if(!results)return error() conversation.extendedResults = results } on("success").to "moreResults" on("error").to "noResults" } moreResults() noResults() }注意,它是怎样把extendedResults放置于会话范围的。这个范围不同于流范围,因为它允许你横跨整个会话而不只是这个流。

同样注意结束状态(每个子流的 moreResults 或noResults在主流中触发事件 :extendedSearch { subflow(extendedSearchFlow) // <--- extended search subflow on("moreResults").to "displayMoreResults" on("noResults").to "displayNoMoreResults" }