2013-08-23 69 views
1

我有一個約束在我的域對象usuario/Usuario.groovy在哪裏更改Grails中客戶端的i18n默認消息?

phone blank: false, matches: "[0-9 -+()]{3,15}" 

而且我在國際化/ messages_es.properties

usuario.telefono.matches=Se admiten números, espacios y los caracteres: -+(). Se admiten entre 3 y 15 caracteres en total. 

這是錯誤信息如果手機模式不匹配:

client side error message

該消息的翻譯將類似於:「請調整請求的格式」

我在任何i18n/messages ...文件中都沒有任何類似的錯誤消息。它看起來是一個客戶端錯誤信息,因爲它立即出現。

在創建GSP有下一個代碼(我認爲錯誤消息可能來自這裏):

<g:hasErrors bean="${usuarioInstance}"> 
<bootstrap:alert class="alert-error"> 
<ul> 
    <g:eachError bean="${usuarioInstance}" var="error"> 
    <li <g:if test="${error in org.springframework.validation.FieldError}">data-field-id="${error.field}"</g:if>><g:message error="${error}"/></li> 
    </g:eachError> 
</ul> 
</bootstrap:alert> 
</g:hasErrors> 

我怎麼可能由一個自定義更改此錯誤消息?

回答

3

的第一件事:這個消息是HTML表單驗證錯誤,不連接到您的應用程序的消息。所以修復將在HTML中。嘗試oninvalid attribut添加到輸入標籤:

<input type="text" name="phone" pattern="[0-9 -+()]{3,15}" required="" value="" id="phone" oninvalid="setCustomValidity('Please, type valid phone number')"> 

可以移動「請鍵入有效的電話號碼」到國際化文件

編輯:如果您使用的字段插件添加oninvalid attr與input-前綴。

<f:field bean="${usuarioInstance}" property="phone" input-oninvalid="setCustomValidity('Please, type valid phone number')"/> 
+0

這就是我的想法,但在我的gsp文件中的手機相關代碼(使用[Grails字段插件](http://grails.org/plugin/fields ))是:''那麼錯誤信息來自哪裏? :/ – chelder

+0

從瀏覽器中,男人。 「你必須明白的第一件事:這個消息是HTML表單驗證錯誤,並且沒有連接到你的應用程序消息」 –

+0

感謝您的編輯。只是好奇,你知道原始消息來自哪裏嗎? – chelder

0

我想你錯過了'無效'作爲消息密鑰的一部分。

使用下面的錯誤代碼匹配:

​​
+0

沒有。添加'.invalid'後仍然是同樣的錯誤信息。另一個「好奇心」是,如果我將語言更改爲英語(鍵入_http:// localhost:8080/webAlojamientoUCA/usuario/create?lang = en_),那麼該錯誤消息仍然是西班牙語。 – chelder

0

不過,如果它不能正常工作..try以下辦法。

在控制器/服務中添加def messageSource。

user.errors?.allErrors?.each {println messageSource.getMessage(it,null) };

經過以下鏈接,說明您已瞭解了這個更好的

http://johnrellis.blogspot.com/2010/02/retrieve-grails-domain-errors-from.html

+0

好的。謝謝。稍後我會看到它有更多的時間。 – chelder

+0

我認爲這並沒有得到客戶端的錯誤信息。服務器端錯誤消息在我的Internet瀏覽器中正常顯示。隨意檢查@ Mr.Cat的答案:) – chelder