java templates groovy enums playframework

java - ¡jugar! marco ENUM y Groovy problema



templates enums (2)

Si entiendo correctamente su pregunta, quiere usar valueProperty y labelProperty para establecer los valores adecuados en la option . Algo como:

#{select "autoCreateEvent", items:models.Woman.Outcome.values(), valueProperty:''ordinal'', labelProperty: ''name'', id:''autoCreateEvent'' /}

EDITAR:

Para que esto funcione, tendrás que modificar un poco la enumeración, así:

public enum Outcome { A,B; public int getOrdinal() { return ordinal(); } }

La razón es que Play # {select} espera getters en los valueProperty y labelProperty , y cuando no se encuentra de manera predeterminada en la enumeración toString

Tengo algo como lo siguiente-

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'' /}

Guarda el valor ENUM en DB, lo cual está bien. Pero cuando recargo / edito, el problema aumenta. Porque usa ALIVE, DEAD, etc. como valor para las opciones, por lo que no puede mostrar la lista correctamente.

¿Alguna idea?


Para agregar a la respuesta anterior, agréguela a su declaración Enum:

public String getLabel() { return play.i18n.Messages.get(name()); }

Asegúrese de usar la siguiente declaración:

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

También puede agregar esto en el Enum:

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

Lo cual será útil si desea mostrar el valor internacionalizado en su archivo de vista (ya que se llama a toString automáticamente cuando se muestra) pero function name () usa toString () por lo que deberá vincular valueProperty a otra función, como se muestra a continuación:

public String getLabel(){ return toString(); } public String getKey() { return super.toString(); } @Override public String toString() { return Messages.get(name()); }

Y el uso de #select:

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