2012-02-26 79 views
1

我有個域類:整數驗證 - 不重新顯示用戶輸入

class Test { 
    Integer blah 
} 

和scafollded控制器和視圖。以無效的Integer1aab)格式填寫blah未通過驗證,但不會重新填充包含無效用戶輸入的文本框。

我想我明白爲什麼會這樣(傳回GSP渲染東陽它是一個Integer不能持有字母字符域實例的blah),但有重新填充無效的輸入形式的一個很好的方式?

有幾個解決方案:有一個瞬態String blah與正則表達式驗證器,確保輸入是數字,然後覆蓋Integer blah獲取器獲取String blah值。然後在窗體上顯示String blah。或者給每個人HTML5 compient瀏覽器type=number工作:)

有沒有更好的方法來解決這個問題?

回答

3

如果在創建或保存域對象時出現錯誤,是否可以將params對象返回給視圖,並在該視圖存在時重新填充輸入?

0

我想我明白爲什麼會這樣(傳回GSP渲染東陽它是一個整數無法容納字母字符域實例等等),

正確,通常重新填充形式的作品這樣

class MyController { 
    def showForm() { 
     [bean: new Test()] 
    } 

    def processForm(Test bean) { 
     if (!bean.validate()) { 
     render view: 'showForm', model: [bean: bean] 
     } else { 
     // save the bean or whatever.... 
     } 
    } 
    } 

而且在showForm.gsp形式的字段使用設置:

<g:textField name="blah" value="${bean.blah}"/> 

因爲bean無法返回到保存錯誤類型值的表單,所以如果您使用上面的標記,這些值將會「丟失」。但是,這些值應該還是在params對象可用的,所以我想下面應該工作(沒有測試它雖然)

<g:textField name="blah" value="${bean.blah ?: params.blah}"/> 

這是可能的定義,定義邏輯和風格各一個模板字段 - 而不是每個字段重複 - 使用新的fields插件。

0

fieldValue標籤是專爲這種使用情況:

視察豆這一直是數據綁定的主題,並獲得該字段的值,無論是從bean的錯誤原先提交的值對象人口在數據綁定期間或來自bean屬性的值。一旦獲得該值,它將自動進行HTML編碼。

例如:

<g:textField name="blah" value="${fieldValue(bean: testInstance, field: 'blah'}"/>