środa, 2 stycznia 2013

Grails - klasa domenowa tylko do odczytu

Grails domyślnie nie wspiera oznaczenia klasy domenowej jako tylko do odczyty, tzn. tak żeby dynamiczne metody 'find' (find, get, list..) działały OK ale zapis, edycja encji nie była możliwa. Opcja taka jest szczególnie przydatna przy pracy z legacy bazami danych. Możemy jednak małym nakładem pracy zapewnić podobną funkcjonalność samemu. Udało mi się znaleźć przynajmniej 2 sposoby:

1. listenery beforeXXX w klasie domenowej np.:

class Demo {

    static constraints = {
    }
    String name

    transient beforeUpdate = {
        throw new RuntimeException('update not allowed')
    }
}

2. zwracanie kodu błędu z kontrolera dla niedozwolonych metod, np.:


    def delete(Long id) {
        response.sendError(405)
    }

Natomiast jeśli chcemy tylko wyłączyć z edycji w widoku wygenerowanym ze scaffoldingu jakieś pole klasy domenowe dostępna jest opcja w constrains:

class Demo {

    static constraints = {
         name(editable: false)
    }
    String name
}

Brak komentarzy:

Publikowanie komentarza