我有以下内容 -
Woman.java
...
@Entity
public class Woman extends Model {
public static enum Outcome {
ALIVE, DEAD, STILL_BIRTH, LIVE_BIRTH, REGISTER
}
...
}
File.java
...
@Entity
public class Form extends Model {
...
public Outcome autoCreateEvent;
...
}
create.html上
#{select "autoCreateEvent", items:models.Woman.Outcome.values(), id:'autoCreateEvent' /}
将DBUM中的ENUM值保存,即可。但是,当我重新加载/编辑时,问题就出现了。因为它使用ALIVE,DEAD等作为选项的值,所以它无法正确显示列表。
任何洞察力?
答案 0 :(得分:3)
如果我理解您的问题,您可以使用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
答案 1 :(得分:1)
要添加到上一个答案,请将其添加到您的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' /}