2011-08-29 36 views
4

结合枚举的命令我有一个类:数据Grails中

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()}"/> 

但是,当我提交表单选定的值不获取绑定到User命令对象的foos财产。我究竟做错了什么?

+0

好奇 - 如果您将用户更改为拥有单个“Foo”(而不是“Set”),那么它是否正确绑定,然后选择单个值? –

+0

@Rob - 是的,工作正常。我认为如果我在选择中的每个选项中添加了索引,那么集合枚举就可以工作,但我想不出任何无痛的方式来做到这一点 –

+0

[Grails绑定集合枚举](http:// stackoverflow .com/questions/7216297/grails-bind-collection-enum) – luvieere

回答

2

http://www.grails.org/TipsAndTricks

枚举使用

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

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

我不认为这对Don造成了问题。 – Gregg

+0

生成脚手架,看看它是如何工作的。 –

+0

在我的情况下,我不想明确指定一个值,我想使用枚举名称作为值。也许增加'String toString(){name()}'会解决我的问题 –

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

所以我不完全知道什么是你和我之间的不同,除了枚举的名称。你能看到什么吗?

+0

你是否编写了GSP代码来生成多选或者你是否支持UI?在我的情况下,我脚手架的用户界面和控制器,但“创建用户”表单没有为我写的枚举 –

+0

字段。它只有SELECT和一个提交按钮。编辑并添加完整性。 – Gregg