Data binding Grails中命令上与枚举的数据绑定
我有一门课:Data binding Grails中命令上与枚举的数据绑定,data-binding,grails,groovy,Data Binding,Grails,Groovy,我有一门课: class User { Set<Foo> foos = [] } 我有一个控制器动作,参数类型为User def someAction = {User user -> // impl omitted } 我在GSP中创建了一个multi-select <g:select name="foos" multiple="true" from="${Foo.values()}"/> 但是当我提交表单时,所选值不会绑定到User
class User {
Set<Foo> foos = []
}
我有一个控制器动作,参数类型为User
def someAction = {User user ->
// impl omitted
}
我在GSP中创建了一个multi-select
<g:select name="foos" multiple="true" from="${Foo.values()}"/>
但是当我提交表单时,所选值不会绑定到User
命令对象的foos
属性。我做错了什么?
枚举使用
如果要在元素中使用带有“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)从本质上讲,这并不是一个真正的答案。但我不能在评论中公布这方面的细节。我刚刚创建了以下内容:
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
}
枚举状态{
好的,KS,FL,MA
}
类用户{
设置状态=[]
静态约束={
}
}
//控制器动作
def save={User->
//我在这里什么都没做除了
//为调试设置断点
}
这就是我得到的:
因此,除了枚举的名称之外,我不完全确定你的和我的有什么不同。你能看到什么吗?好奇-如果你将你的用户更改为有一个
Foo
(而不是Set
),然后选择一个值,它绑定正确吗?@Rob-是的,可以。我认为,如果我在select中的每个选项中添加索引,枚举集就会起作用,但我想不出任何轻松的方法来实现这一点,您的代码的可能副本在Grails 1.2.1上可以很好地工作。我需要将Set
中的类型从Set foos
添加到Set foos
我认为这不会导致don出现问题。在我的情况下,我不想明确指定一个值,我想使用枚举名称作为值。也许将String添加到String(){name()}
可以解决我的问题您是编写GSP代码来生成multi-select还是构建UI?在我的例子中,我构建了UI和控制器,但是“创建用户”表单没有我编写的枚举的字段。它只有选择和提交按钮。编辑并添加了完整性。
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
}