2011-04-26 60 views
1

我試圖得到一個簡單的錯誤代碼的本地化形式,但我似乎無法讓它參數化,因爲它應該。在我的集成測試,我有這個,只是爲了說明問題:Grails不使用message.properties作爲錯誤消息?

for(FieldError error : errors.fieldErrors) 
{ 
    println error.toString() 
} 

在一些手工綁定,我有這樣的:

myObject.errors.rejectValue("field1.field2", "typeMismatch.java.lang.Integer", [value] as Object[], "")

但是當我打印我得到這個:

Field error in object 'com.me.MyObject' on field 'field1.field2': rejected value [1]; 
codes 
[typeMismatch.java.lang.Integer.com.me.MyObject.field1.field2,typeMismatch.java.lang.Integer.field1.field2,typeMismatch.java.lang.Integer.field2,typeMismatch.java.lang.Integer.int,typeMismatch.java.lang.Integer] 

爲什麼message.properties的字符串沒有被使用? typeMismatch.java.lang.Integer=Property {0} must be a valid number

+0

'「field1.field2」'引用讓我懷疑 - 它是一個有效的字段引用嗎?它是嵌套字段嗎?例如,我們只使用'「field2」'。 除此之外,絕對相似的代碼適合我。 你有'typeMismatch.java.lang.Integer'消息顯式地在你的'messages.properties'中嗎? – 2011-04-27 10:32:55

回答

2

您可以使用<g:message>標籤作爲ataylor曾建議或MessageSource的Spring bean由Grails定義。在控制器中使用此示例的示例如下所示

import org.springframework.context.MessageSource 
import org.springframework.web.servlet.support.RequestContextUtils as RCU 

class SomeController { 

    MessageSource messageSource 

    def someAction = {SomeObject someObject -> 

    for (error in someObject.errors) { 

     // lookup the error message 
     Locale locale = RCU.getLocale(request) 
     String errorMsg = messageSource.getMessage(error) 

     println errorMsg 
    } 
    } 
} 
2

將您的錯誤通過g:message標記傳遞給message.properties。在控制器,你可以寫這樣的事情:

for(FieldError error : errors.fieldErrors) 
{ 
    println g.message(error: error) 
} 

或者,你可以使用messageSource的Spring bean:

def messageSource 

for(FieldError error : errors.fieldErrors) 
{ 
    def locale = RequestContextUtils.getLocale(request) 
    println messageSource.getMessage(error, locale) 
} 
+0

+1就像我在發佈我的代碼時一樣,您使用Spring bean信息更新了您的答案。我很想刪除我的內容,但現在我會放棄它,因爲我認爲它增加了一些非常邊緣的額外細節 – 2011-04-26 17:05:31