2010-09-21 48 views
1

我有一個Grails的Webflow類似於下面的例子:如何在Grails Web Flow中呈現驗證結果?

def myFlow = { 
    init { 
     action { 
      def domain = MyDomain.get(params.id) 
      flow.domain = domain ? domain : new MyDomain() 
     } 
     on('success').to 'first' 
    } 

    first { 
     on('continue') { 
      flow.domain.properties = params 
      if(!flow.domain.validate()) { 
       return error() 
      } 
     }.to 'second' 
    } 

    ... 
} 

鑑於此例中,如果在on('continue')first轉移時驗證錯誤:

  • 什麼是設置的首選方式帶有無效域對象的模型,所以我可以在我的視圖中使用<g:hasErrors>...(就像我在正常的控制器操作中那樣)?
  • 當我打電話error(),它發送的流量回initfirst
  • 是否error()帶任何參數,可以用來做什麼,我試圖完成(即模型)(我無法找到在error()方法多文檔)。
  • 我也會就如何改善流程狀態以便更好地處理這些驗證錯誤提出建議。

摘要:在Grails Web Flow中呈現驗證錯誤的首選方法是什麼?

回答

0

我發現一個方法來做到這一點是在過渡態專門調用render(),提供模型。這裏的地方只有一個域的驗證的例子:

first { 
    render(view: 'info', model: [flow.domain]) 
    on('continue') { 
     if(!flow.domain.validate(['myField'])) { 
      return error() 
     } 
    }.to 'second' 
} 

之一,那麼可以使用<g:hasErrors>如下:

<g:hasErrors bean="${domain}" field="myField"> 
    <g:renderErrors bean="${domain}" as="list" field="myField"/> 
</g:hasErrors> 
3

-1

什麼是首選的方法來設置 模型無效的域對象 ,所以我可以使用...在我的 視圖(像我會在一個正常的 控制器交流薦)?

你只需要返回具有錯誤您的域對象。你可以做的是,在 動作狀態

action { 
    user.validate() 
    return [user:user] 
} 

您還可以設置在閃光範圍的錯誤。在每個過渡Grails將閃光範圍的內容複製到模型視圖,從而可以在你的GSP頁面

action { 
    flash.error = "your message" 
} 

-2

當我打電話誤差(),它發送的迴流初始化或到 首先?當你調用錯誤就打電話給你

定義的 過渡您應該定義一個處理程序,如

on("error").to("handlerError") 

是否錯誤()帶任何參數(即模型),可以是用於 我試圖完成(我不能 找到有關錯誤() 方法)的許多文檔。

我不這麼認爲,但你可以做以下的從一種狀態過渡到另一種

on("error") { 
    // do Something 
}.to("handlerError") 

3-

我還會採取建議時設置任何變量關於如何將我的流程狀態改進爲 更好 - 便於處理這些 驗證錯誤。

我使用閃存的全局和表單錯誤,但我需要一種方法來處理它。目前在Grails中,Flash範圍在流程中的管理方式與在正常操作中管理的流程範圍不同。所以我決定寫一個小插件來改變Flash範圍在流中的處理方式,並使其與正常操作中的方式一致。 我一個GSP頁面,我可以在follwing方式使用我的標籤,無論在動作類型(正常或流量)

<message:global /> 
or 
    <message:inline /> 

用作表單域的錯誤,我不喜歡以應對域對象錯誤。我想要更統一的東西。所以我決定讓它們成爲http協議的一部分,如果我願意的話,我有一個javascript組件將它們注入到表單中。我發現這個解決方案比每次處理g:錯誤都要乾淨得多。

-ken

+0

+1,謝謝你的回答。我會看看你的建議。 – 2010-09-21 23:22:13