玩!框架 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】:

如果我正确理解您的问题,您想使用valuePropertylabelPropertyoption 中设置正确的值。比如:

#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 期望在 valuePropertylabelProperty 参数中使用 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 模板[关闭]

在 Play 1 框架中使用带有 groovy 模板的聚合物

体验玩!框架大应用程序可维护性

使用 Akka 和 Websockets 玩框架

玩!框架。模板“包括”

玩!:如何在 groovy 表达式中放置属性值