Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition porta la maglia iridata su uno smartphone accessibile: display Extreme AMOLED da 6,78 pollici a 144Hz, fotocamera Sony LYTIA 710 con moto ai, Snapdragon 7s Gen 3 abbinato a 8GB di RAM, batteria da 5200 mAh con ricarica TurboPower a 68W e certificazione IP68/IP69, il tutto in una veste PANTONE Silhouette con logo dorato a 24 carati, moto buds bass incluse in confezione e contenuti software dedicati ai Mondiali 2026
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati?
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati?
Dopo più di un anno dal primo test drive ci siamo rimessi al volante della Renault 5 E-Tech Electric, questa volta utilizzandola come prima auto per circa due settimane. Scoprite con noi se il progetto convince ancora
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
Un proiettore economico, che fa della portabilità e immediatezza i suoi punti di forza. Adatto per una camera da letto o per la casa vacanze, è basato su sistema proprietario Linux ma offre piena compatibilità ufficiale a Netflix
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-05-2007, 16:33   #1
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
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
}
Fin qua tutto bene... funziona correttamente.
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
}
Ed infine nella mia jsp uso i tag di stuts per creare dei radio button per far scegliere all'utente il valore utilizzando il metodo misterioso, ovvero l'ultimo,per popolare la lista

Codice:
<s:radio label="enumerativo" list="mysterymethod" name="object.enum"></s:radio>
Bene... veniamo ora al metodo misterioso.Il metodo misterioso deve ritornare una Map che permette a struts di popolare i radio-button e fornire i corretti valori all'applicazione al submit.
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;
	}
non funziona niente e mi viene detto

Quote:
ParametersInterceptor - [setParameters]: Unexpected Exception catched: Error setting expression 'object.enum' with value '[Ljava.lang.String;@1d22ddb'


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;
	}
e modifico opprtunamente solo il getter e il setter dentro MyObject
Codice:
	public Integer getEnum() 
	{
		return enum.ordinal();
	}
	
	
	public void setEnum(Integer enum) 
	{
		this.enum = MyEnum.values()[enum];
	}
tutto funziona.


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());
	}
il risultato è sempre java.lang.String


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
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio Motorola edge 70 Fusion FIFA World Cup 26 Editio...
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati? Renault 5 elettrica al giudizio definitivo: solo...
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
ASUS ProArt GoPro Edition è il notebook compatto per chi crea ASUS ProArt GoPro Edition è il notebook c...
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Il monopattino elettrico Xiaomi Electric...
CMF Clip Pro, auricolari open-ear pensat...
Fermati per essersi opposti ai data cent...
Da satellite a data center: il design di...
Google Pixel Watch 5, ecco tutte le novi...
Aumenti fino al 140% per le GPU in Giapp...
La guida autonoma sale di livello: NVIDI...
Leucemia pediatrica: l'intelligenza arti...
Niente GPS, niente pilota: così i droni ...
Il rettore si scusa: l'esame sorvegliato...
Arriva Autonomous Security, la nuova off...
Electronic Arts lascia la Borsa: complet...
Trump lancia l'idea della Freedom Car: v...
Il metallo liquido fuoriesce e brucia il...
Datacenter AI in Norvegia: Anthropic sce...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:19.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v