|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
[JAVA+STRUTS2+HIBERNATE] Enumerativi
Non so quanti di voi usino queste tecnologie, ma ho un poblema e mi da fastidio no saperlo risolvere
Semplifichiamo le cose al massimo: Ho un campo dell'oggetto che è un enumerativo. Utilizzando Hibernate lo riesco a mappare nel DB con intero con la semplice annotations @Enuemerated. Codice:
@Entity
public class MyObject
{
private MyEnum enum;
@Enumerated
public MyEnum getEnum()
{
return enum;
}
public void setEnum(MyEnum enum)
{
this.enum = enum;
}
}
public enum MyEnum
{
PRIMO,
SECONDO,
TERZO
}
Ora vorrei che l'oggetto venisse caricato da una form. Quindi uso struts e creo la relativa action. Codice:
public class MyAction extends ActionSupport
{
private MyObjecft object;
public String execute() throws Exception
{
if(getObject() == null)
{
return INPUT;
}
//Salvo i dati nel DB utilizzando Hibernate
return SUCCESS;
}
public void setObject(MyObject object)
{
this.object= object;
}
public MyObject getObject()
{
return object;
}
// METODO PER OTTENERE LA LISTA DELLE OPZIONI
}
Codice:
<s:radio label="enumerativo" list="mysterymethod" name="object.enum"></s:radio> Se io uso questo: Codice:
public Map<MyEnum, String> getMyEnums()
{
Map<MyEnum, String> map = new HashMap<MyEnum, String>();
for(MyEnum enum: MyEnum.values())
{
map.put(enum,enum.name());
}
return map;
}
Quote:
Se invece utilizzo gli interi, e quindi Codice:
public Map<Integer, String> getMyEnums()
{
Map<Integer, String> map = new HashMap<Integer, String>();
for(MyEnum enum: MyEnum.values())
{
map.put(enum.ordinal(),enum.name());
}
return map;
}
Codice:
public Integer getEnum()
{
return enum.ordinal();
}
public void setEnum(Integer enum)
{
this.enum = MyEnum.values()[enum];
}
Il bello è che se modifico in questo modo il setter Codice:
public Object getEnum()
{
return enum;
}
public void setEnum(Object enum)
{
System.out.println(enum.getClass().getCanonicalName());
}
Evidentemente Struts fa il casting in automatico delgi interi, ma degli enum no. C'è un metodo per riuscire a leggere direttamente il risultato della scelta come enumerativo?? Se la risposta è no, quale è il metodo più eleganete per continuare ad utilizzare nella applicazione gli enumerativi ( che garantiscono type-safe) e leggere attravero gli interi?? GARZIE GRAZIE ![]() P.S.: spero di essere stato chiaroe di non avervi affto addormentare con la lunghezza del post |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:06.



















