Java 玩框架枚举与Groovy问题
我有如下的东西- Woman.javaJava 玩框架枚举与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
...
@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,如果找不到,则默认为enumtoString
添加到上一个答案中,请将其添加到枚举声明中:
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。。。你有什么错误?没有错误!但它给出了错误的输出,尽管我仍然有麻烦,但你所说的还可以:)