2013-10-10 36 views
0

我有一個用戶註冊表單,其中使用命令對象驗證字段。其中一個字段是複選框,它在繼續註冊之前必須進行檢查,並且不會保存到域對象。該複選框在命令對象中具有相應的布爾字段。如果未選中複選框,則會從自定義驗證器中引發驗證錯誤。Grails命令對象臨時字段驗證

問題是,此錯誤不會在<g:renderErrors bean="${command}" as="xml"/>塊中傳播(驗證程序正確觸發)。

的命令對象:

class RegisterCommand { 

... 
Boolean termsChecked 
... 
static constraints = { 
    ... 
    termsChecked validator: RegisterController.termsCheckedValidator 
} 

驗證:在GSP文件

static final termsCheckedValidator = {termsChecked, command, errors -> 
    if (!command.termsChecked) { 
     return 'registerCommand.termsChecked.required' 
    } 
} 

複選框:

<g:checkBox value="${command.termsChecked}" bean="${command}" name='termsChecked'/> 

這到底是怎麼解決的?

+0

是'RegisterController'驗證你已經證明和有關使用? – dmahapatro

+0

@dmahapatro,是的。驗證正確傳遞,但錯誤消息永遠不會返回到視圖。 – rpozarickij

回答

3

如果您將3個參數傳遞給驗證器,並且最後一個參數爲errors,則認爲返回代碼被忽略,認爲Spring錯誤正在處理錯誤。

如果你要使用的錯誤代碼,然後只通過2參數驗證爲

static final termsCheckedValidator = {termsChecked, command -> 
    if (!command.termsChecked) { 
     return ['required.termsChecked'] 
    } 
} 


//messages.properties 
registerCommand.termsChecked.required.termsChecked=blah 
+0

感謝您的回覆。我除去'errors'變量,現在表單提交後我得到以下信息:'URI /PROJECTNAME /註冊/註冊 類 groovy.lang.MissingMethodException 消息 方法的無簽名:靜態org.apache .commons.lang.StringEscapeUtils.escapeXml()適用於參數類型:(java.lang.Boolean)values:[false]可能的解決方案:escapeXml(java.lang.String),escapeXml(java.io.Writer,java。 lang.String),escapeHtml(java.lang.String),escapeSql(java.lang.String)'編輯:獲得'列表'格式錯誤工作正常,但我需要他們在XML。 – rpozarickij

+0

@cNduo嘗試不同的消息密鑰。還要注意返回爲'list'。查看我的更新。 – dmahapatro

+0

你的更新確實解決了這個問題,但只有當錯誤輸出格式是「list」時。那麼'xml'格式呢?因爲我在第一條評論中仍然遇到同樣的錯誤。 – rpozarickij