2014-01-10 82 views
1

我有一個用戶域類,在其中有一個名爲性別的枚舉字段。它具有男性和女性的價值。當我在GSP頁面上表示它時,它顯示爲一個下拉菜單。爲了測試網絡應用程序的安全性,我使用firebug將男性的值改爲0來查看驗證是否抓住了它。我的確如此,但它顯示的信息不是人類可讀的。我在我的messages.properties中使用了以下內容。Grails messages.properties typeMismatch錯誤消息

typeMismatch.User.gender=The value for {0} is {1} and it is not a valid value 

但問題是,當我的GSP呈現錯誤時,它不會用下拉列表的被拒絕值替換{1}。我嘗試了{2}和{3}等,它只將它們打印爲字符串,並且不替換它們。有沒有辦法在郵件中獲取rejectedValue?

更新:我必須toString方法在我的枚舉性別太。這裏是一些來自controller和gsp頁面的代碼。

控制器:

if (bioInstance.hasErrors() || currentUser.hasErrors()) {        
    render(view: 'editProfile', model: [user: currentUser, bioInstance: bioInstance]) 
    return 
    } 

GSP:

<g:hasErrors beans="[bioInstance:Bio,user:User]"> 
    <ul class="alert alert-danger"> 
     <g:renderErrors beans="[bioInstance:Bio,user:User]" as="list"/> 
    </ul> 
</g:hasErrors> 
+0

你對enum有'toString()'方法嗎? – brwngrldev

+0

不,我不知道。我需要一個嗎? – AlexCon

+0

是的,你也應該發佈更多的代碼,以便更容易診斷。控制器方法和gsp頁面的一部分。謝謝 – brwngrldev

回答

0

它發生,因爲通過的grails消息呈現錯誤信息(錯誤:someError)方法。 someErrororg.springframework.validation.FieldError的一個實例,它是在驗證階段創建的,它的消息只有一個參數 - 域類本身的名稱。所以,這是一個綁定錯誤,而不是驗證錯誤,默認情況下有三個參數:屬性名稱,域類名稱和被拒絕的值。

如果您使用grails 2.3或更高版本 - 您可以編寫一個自定義聯編程序,如http://grails.org/doc/latest/guide/theWebLayer.html#dataBinding所述。或者在域類中使用一個整數字段,爲它寫一些約束條件,並通過getter將它公開給enum。

+0

這聽起來有點複雜。我想知道Grails是否可以支持這一切。 – AlexCon