玩!框架 ENUM 和 Groovy 问题
Posted
技术标签:
【中文标题】玩!框架 ENUM 和 Groovy 问题【英文标题】:play! framework ENUM and Groovy problem 【发布时间】:2011-08-07 16:28:50 【问题描述】:我有类似以下的东西-
Woman.java
...
@Entity
public class Woman extends Model
public static enum Outcome
ALIVE, DEAD, STILL_BIRTH, LIVE_BIRTH, REGISTER
...
文件.java
...
@Entity
public class Form extends Model
...
public Outcome autoCreateEvent;
...
创建.html
#select "autoCreateEvent", items:models.Woman.Outcome.values(), id:'autoCreateEvent' /
它将 ENUM 值保存在 DB 中,这没关系。但是,当我重新加载/编辑时,问题就出现了。因为它使用 ALIVE、DEAD 等作为选项的值,所以无法正确显示列表。
有什么见解吗?
【问题讨论】:
【参考方案1】:如果我正确理解您的问题,您想使用valueProperty
和labelProperty
在option
中设置正确的值。比如:
#select "autoCreateEvent", items:models.Woman.Outcome.values(), valueProperty:'ordinal', labelProperty: 'name', id:'autoCreateEvent' /
编辑:
为此,您需要稍微调整枚举,如下所示:
public enum Outcome
A,B;
public int getOrdinal()
return ordinal();
原因是 Play #select 期望在 valueProperty
和 labelProperty
参数中使用 getter,如果未找到则默认为枚举 toString
【讨论】:
您好,感谢您的回复,我认为它应该可以工作,但它没有。你能去这个链接搜索'valueProperty'吗,他们评论了那部分-svn.codehaus.org/grails-plugins/grails-filterpane/tags/… @rifat 您提供了 grails 的链接,而不是 play 框架...您遇到什么错误? 没有错误!但它给出了错误的输出 而我期望 虽然我还是有麻烦,但你说的没问题:)【参考方案2】:要添加到之前的答案,请将其添加到您的 Enum 声明中:
public String getLabel()
return play.i18n.Messages.get(name());
确保使用以下声明:
#select "[field]", items:models.[Enum].values(), valueProperty:'name', labelProperty: 'label' /
你也可以在枚举中添加这个:
@Override
public String toString()
return getLabel();
如果您想在视图文件中显示国际化的值(因为显示时会自动调用 toString),但函数 name() 使用 toString(),因此您必须将 valueProperty 绑定到另一个函数,这将很有用,如关注:
public String getLabel()
return toString();
public String getKey()
return super.toString();
@Override
public String toString()
return Messages.get(name());
而#select 使用:
#select "[field]", items:models.[Enum].values(), value:flash.[field], valueProperty:'key', labelProperty: 'label' /
【讨论】:
以上是关于玩!框架 ENUM 和 Groovy 问题的主要内容,如果未能解决你的问题,请参考以下文章
播放框架 1.0。我在哪里可以学习 groovy UI 模板[关闭]