Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 玩框架枚举与Groovy问题_Java_Templates_Groovy_Enums_Playframework - Fatal编程技术网

Java 玩框架枚举与Groovy问题

Java 玩框架枚举与Groovy问题,java,templates,groovy,enums,playframework,Java,Templates,Groovy,Enums,Playframework,我有如下的东西- Woman.java ... @Entity public class Woman extends Model { public static enum Outcome { ALIVE, DEAD, STILL_BIRTH, LIVE_BIRTH, REGISTER } ... } ... @Entity public class Form extends Model { ... public Outcome auto

我有如下的东西-

Woman.java

...
@Entity
public class Woman extends Model {

    public static enum Outcome {
        ALIVE, DEAD, STILL_BIRTH, LIVE_BIRTH, REGISTER
    }
    ...
}
...
@Entity
public class Form extends Model {
    ...
    public Outcome autoCreateEvent;
    ...
}
File.java

...
@Entity
public class Woman extends Model {

    public static enum Outcome {
        ALIVE, DEAD, STILL_BIRTH, LIVE_BIRTH, REGISTER
    }
    ...
}
...
@Entity
public class Form extends Model {
    ...
    public Outcome autoCreateEvent;
    ...
}
Create.html

#{select "autoCreateEvent", items:models.Woman.Outcome.values(), id:'autoCreateEvent' /}
它将枚举值保存在DB中,这是正常的。但是,当我重新加载/编辑时,问题就出现了。因为它使用live、DEAD等作为选项的值,所以无法正确显示列表


有什么见解吗?

如果我正确理解了您的问题,您希望使用
valueProperty
labelProperty
选项中设置正确的值。比如:

#{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,如果找不到,则默认为enum
toString

添加到上一个答案中,请将其添加到枚举声明中:

public String getLabel() {
    return play.i18n.Messages.get(name());
}
#{select "[field]", items:models.[Enum].values(), valueProperty:'name', labelProperty: 'label' /}
确保使用以下声明:

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),但函数名()使用toString(),因此必须将valueProperty绑定到另一个函数,这将非常有用,如下所示:

public String getLabel(){
    return toString();
}

public String getKey() {
    return super.toString();
}

@Override
public String toString() {
    return Messages.get(name());
}
和#选择使用:

#{select "[field]", items:models.[Enum].values(), value:flash.[field], valueProperty:'key', labelProperty: 'label' /}

您好,谢谢您的回复,我认为它应该有效,但它没有。你能转到这个链接并搜索“valueProperty”吗?他们评论说,part-@rifat你提供了一个指向grails的链接,而不是play framework。。。你有什么错误?没有错误!但它给出了错误的输出,尽管我仍然有麻烦,但你所说的还可以:)