2

commandObjectフォームを送信するときにを使用してデータを検証しようとしています。で hasMany リレーションを検証できますかcommandObject。私のシナリオはこんな感じです。

classeshasMany 関係を持つ単純な2 つの方法:

class Book{
    String nameBook
}

class Author{
    String nameAuthor
    static hasMany = [books:Book]    
}

commandObjectフォームを送信するときに検証したい hasMany でシンプル。

@grails.validation.Validateable
class MyValidateCommand{

    String nameAuthor
    static hasMany = [books:Book]


    static constraints = {
        nameAuthor nullable:false
        books nullable:false
    }

}

Ps: この commandObject が間違っていることはわかっています。コンパイルできません。しかし、私はこのようなことをすることができますか???

4

2 に答える 2

7

hasManyin GORM は Domain オブジェクトの関連付けに使用されます。コマンド オブジェクトの場合、ドメインごとに異なるコマンド オブジェクト (例:AuthorCommandBookCommand) を用意するのが明快なアプローチであり、コマンド オブジェクトは次のようになります。

import org.apache.commons.collections.list.LazyList
import org.apache.commons.collections.functors.InstantiateFactory

//Dont need this annotation if command object 
//is in the same location as the controller
//By default its validateable
@grails.validation.Validateable
class AuthorCommand{
    String nameAuthor
    //static hasMany = [books:Book]

    //Lazily initialized list for BookCommand
    //which will be efficient based on the form submission.
    List<BookCommand> books = 
            LazyList.decorate(new ArrayList(), 
                              new InstantiateFactory(BookCommand.class))

    static constraints = {
        nameAuthor nullable:false
        books nullable:false

        //Let BookCommand do its validation, 
        //although you can have a custom validator to do some 
        //validation here.
    }
}
于 2013-08-22T14:03:08.457 に答える
0

なぜあなたが(通常の休止状態のhasMany宣言)のように試すことができないのかわからない

class MyValidateCommand{

    String nameAuthor
    Set<Book> books= new HashSet<Book>();


    static constraints = {
        nameAuthor nullable:false
        books nullable:false
    }

}
于 2014-03-21T05:22:00.430 に答える