0

我想在我的Command對象中創建一個自定義驗證器,以確保如果選擇了notifyMe checkbox,表單的字段email address將不會爲空。Grails - 命令對象,自定義條件驗證程序

這裏是實現它我的最新嘗試:

email(blank: true, nullable: true, email: true, 
        validator: {email, creditProviderCommand -> 
           if (creditProviderCommand.notifyMe == 'on') 
            return email.size() > 0}) 

我與email != nullemail != ''也嘗試過,但它不是在這兩種情況下工作,這意味着表單提交被接受甚至與notifyMe checkbox檢查, email address字段留空。

該操作的代碼正確處理驗證錯誤(甚至是唯一約束)。 任何想法我做錯了什麼?

非常感謝您的幫助。

+0

'notifyMe','boolean'或'String'類型是什麼?實際分配給它什麼價值?我想'boolean'或'Boolean',所以你只需要檢查它的真相,而不是''on''。 –

回答

0

上面的代碼對我來說看起來很好。當您選中複選框時,您是否100%確定creditProviderCommand.notifyMe == 'on'

表單提交甚至與notifyMe複選框

表單提交,總是會被接受,即使有驗證錯誤。您有責任檢查驗證錯誤並確定驗證失敗時應採取的措施,例如,

def myAction = {MyCommand cmd -> 

    if (cmd.validate()) { 
    // code to be executed when validation succeeds 
    } else { 
    // code to be executed when validation fails 
    } 
} 
+0

實際上有一個錯誤,Grails在只包含空白字符(電子郵件約束)時允許使用電子郵件。 這就是我如何工作解決此問題,使用.trim()排除空格: 驗證: - (電子郵件)!{電子郵件,creditProviderCommand> 如果(creditProviderCommand.notifyMe){ 如果 回覆郵件= NULL else return email.trim()!='' } } –