Grails在多选,枚举,命令对象和域类之间绑定

时间:2014-09-09 10:06:57

标签: grails enums command

我正在开发一个使用多选字段的项目。

我的域类定义为:

class RoomWanted{

  Set<MateAgeRange> mateAgeRanges

}

然后:

public enum MateAgeRange {
   TWENTIES('18-29')
   ,THIRTIES('30-39')
   ,FOURTIES("40-49")
   ,FIFTIES("50-59")
   ,SIXTIES("60+")



    final String value

    private MateAgeRange(String value) {
        this.value = value
    }

    String toString() { value }
    String getKey() { name() }


    static belongsTo=[roomWanted:RoomWanted]
}

我的命令对象是:

class RoomWantedDetailsCommand implements Serializable {

      Set<MateAgeRange> mateAgeRanges
}

我想要创建页面,编辑页面,显示页面

这是我的创建页面

<g:select name="mateAgeRanges" multiple="true" from="${MateAgeRange?.values()}"  optionKey="key" />

我的命令对象&#39; cmd&#39;得到值

print cmd.mateAgeRanges

给出了价值  [30-39,50-59]当我选择这两个。

但它不绑定到域类中的字段。 在节目页面中, 如果我使用     cmd.mateAgeRanges 它返回[]。

2 个答案:

答案 0 :(得分:1)

域类应定义为:

class RoomWantedDetailsCommand implements Serializable {

      Set<MateAgeRange> mateAgeRanges

      static hasMany = [ mateAgeRanges:MateAgeRange ]
}

枚举定义为:

public enum MateAgeRange {
   TWENTIES('18-29')
   ,THIRTIES('30-39')
   ,FOURTIES("40-49")
   ,FIFTIES("50-59")
   ,SIXTIES("60+")



final String value

private MateAgeRange(String value) {
    this.value = value
}

String toString() { value }
String getKey() { name() }


static belongsTo=[roomWanted:RoomWanted]
}

在编辑页面中:

  <g:select name="mateAgeRanges" multiple="true" from="${MateAgeRange?.values()}" optionKey="key" value="${roomWanted?.mateAgeRanges}"/>

在展会页面中:       $ {roomWanted?.mateAgeRanges}

在创建页面中     

答案 1 :(得分:0)

将hasMany添加到您的RoomWanted

class RoomWanted{

  Set<MateAgeRange> mateAgeRanges

  static hasMany = [ mateAgeRanges:MateAgeRange ]

}

如果你不这样做,GORM不会以全自动方式填写这个关联。

然后您应该使用roomWanted.addToMateAgeRanges(..)填写值