数据绑定到Grails中命令的枚举

时间:2011-08-29 19:57:11

标签: data-binding grails groovy

我有一个班级:

class User {
    Set<Foo> foos = []
}

其中Foo是枚举:

class Foo { A, B, C, D}

我的控制器操作的参数类型为User

def someAction = {User user ->
    // impl omitted   
}

我在GSP中创建了一个多选

<g:select name="foos" multiple="true" from="${Foo.values()}"/>

但是当我提交表单时,所选值不会绑定到foos命令对象的User属性。我做错了什么?

2 个答案:

答案 0 :(得分:2)

http://www.grails.org/TipsAndTricks

枚举使用

如果你想在一个元素中使用带有“value”字符串属性(一个很常见的习语)的枚举,试试这个:

enum Rating {
    G("G"),PG("PG"),PG13("PG-13"),R("R"),NC17("NC-17"),NR("Not Rated")

    final String value

    Rating(String value) { this.value = value }

    String toString() { value }

    String getKey() { name() } 
}

然后将optionKey =“key”添加到您的代码中。图片来源:Gregg Bolinger

答案 1 :(得分:0)

这本身并不是一个真正的答案。但我不能在评论中发布这个细节。我刚刚创建了以下内容:

enum State {
  OK,KS,FL,MA
}

class User {
  Set<State> states = []

  static constraints = {
  }
}

<g:form controller="home" action="save">
    <g:select name="states" multiple="true" from="${com.orm.fun.State.values()}"/>
    <g:submitButton name="save" value="Save"/>
</g:form>

// controller action
def save = { User user ->
    // I didn't do anything here except
    // set a breakpoint for debugging
}

这就是我得到的:

Debugging in IDEA

所以我不完全确定你和我之间有什么不同,除了enum的名字。你能看到什么吗?