2011-10-31 109 views
1

我正在開發使用Grails框架的應用程序,並且在從gsp視圖作爲方法調用時遇到了hasErrors問題。Grails hasErrors方法與三元運算符?

我有一個窗體,可以通過數據庫中的值填充(默認值)。這些值存儲在會話對象中。用戶可以編輯表單字段中的值並將結果發送回數據庫。在數據持續存在之前,我有一個驗證數據的命令對象。如果存在錯誤,則命令對象呈現視圖時突出顯示相同的表單和錯誤。

我想要做的是有表單字段填充存儲在會話對象中的值,除非有命令對象的錯誤。在這種情況下,字段應該填入用戶輸入的錯誤值。

下面的代碼片段:

<g:textField name="somename" id="someid" value="${hasErrors(bean: commandobject, field: 'somename') ? fieldValue(bean: commandobject, field: 'somename') : session.somevalue}" /> 

問題與上面的代碼是在場上,不管輸入值,無論是對還是錯,現場總是與從通話對象的值結束。有沒有解決這個問題的方法,或者我是否首先做錯了什麼?

回答

3

當你調用hasErrors就像你曾經調用<g:hasErrors/>標籤不返回一個布爾值 - 它看起來的條件,有條件調用標籤體。在這種描述下,爲什麼它的行爲是有道理的。

什麼我建議是創建自己的TagLib並在條件中使用commandobject.errors.hasFieldErrors('somename')[docs](讓你要尋找的布爾值)。

2

作爲GSP方法調用的hasErrors與標籤<g:hasErrors>有點不同。前者的目的是設置的div或跨度等CSS類...

e.g. <div class="prop ${hasErrors(bean:parent, field:'child.name', 'errors')}"> 

其中errors是CSS類名。所以如果你不指定輸出字符串,它默認情況下會返回false,所以爲了解決你的問題,返回'1'。所以,你的代碼應該是這樣的:

<g:textField name="somename" id="someid" value="${hasErrors(bean: commandobject, field: 'somename', '1') ? fieldValue(bean: commandobject, field: 'somename') : session.somevalue}" /> 

這也將與邏輯運算在<g:if>

工作