Пользовательский валидатор Grails для класса домена - PullRequest
3 голосов
/ 18 января 2011

У меня есть ограничение, поэтому может храниться не более ConfigurationHolder.config.support.reminder.web.person.max объекта.Я не нашел, как добавить валидатор, который не относится к конкретному свойству.Так что пока я реализовал это таким образом.У вас, ребята, есть идеи, как сделать это лучше?

package support.reminder.web

import org.codehaus.groovy.grails.commons.ConfigurationHolder;

class Person {

    String firstName
    String lastName
    String email
    Date lastDutyDate

    static constraints = {
        firstName(blank: false)
        lastName(blank: false)
        email(blank: false, email: true)
        lastDutyDate(nullable: true)
        id validator: {val ->
        if (val)
            Person.count() <= ConfigurationHolder.config.support.reminder.web.person.max
        else
            Person.count() < ConfigurationHolder.config.support.reminder.web.person.max
    }
    }

    String toString() {
        "[$firstName $lastName, $email, $lastDutyDate]"
    }
}

Ответы [ 3 ]

5 голосов
/ 28 января 2011

Вы можете использовать Плагин пользовательских ограничений Grails для управления реализацией вашей проверки.Затем вы можете вызвать собственное ограничение, как и предопределенные ограничения Grails:

package support.reminder.web

import org.codehaus.groovy.grails.commons.ConfigurationHolder as CH

class Person {

    String firstName
    String lastName
    String email
    Date lastDutyDate

    static constraints = {
        firstName(blank: false)
        lastName(blank: false)
        email(blank: false, email: true)
        lastDutyDate(nullable: true)
        id(maxRows: CH.config.support.reminder.web.person.max)
    }

}

В качестве альтернативы, если вы не хотите полагаться на сторонние плагины, вы можете реализовать логику своего пользовательского валидатора в методе Service.но позвоните из пользовательского валидатора в домене:

package support.reminder.web

import org.codehaus.groovy.grails.commons.ConfigurationHolder as CH

class Person {

    def validationService
    String firstName
    String lastName
    String email
    Date lastDutyDate

    static constraints = {
        firstName(blank: false)
        lastName(blank: false)
        email(blank: false, email: true)
        lastDutyDate(nullable: true)
        id (validator: {val ->
           validationService.validateMaxRows(val, CH.config.support.reminder.web.person.max)
        }
    }

}
0 голосов
/ 20 января 2011

Я рекомендую вам использовать сервисную функцию, например, personService.addPerson ().Затем проверьте ограничение перед сохранением нового объекта.Будет полезно, если вы получите более сложное ограничение, например, когда оно связано со многими объектами домена, например.

Использование валидатора для ограничения количества объектов на самом деле не очень хорошо, если касается значениявалидатор: объект действителен, только число объектов слишком велико.

Короче говоря: логический код отправляется в сервис.

0 голосов
/ 19 января 2011

У меня нет лучшей идеи, но я предлагаю вам проверить, нет ли

...