## FAQ: definizione strutture dati, variabili applicative e binding widget-dati

In questa sezione sono riportate le domande più frequenti emerse durante l' utilizzo di guigen relative allo strato model dell'applicazione

Q: Ho modellato un ApplicationData di tipo SimpleType DATE, ma nel codice generato il tipo corrispondente è `java.lang.String`: è corretto?

A: Si: la scelta di mappare il tipo data con una stringa è una scelta esplicita di design.

Q: Vorrei modellare un metodo di utilità in un ComplexType: è possibile?

A: Non è possibile: le strutture dati modellate come ComplexType devono essere considerate dei value object e non devono dunque contenere logiche ulteriori. Si consiglia di utilizzare delle classi java con ruolo di Helper.

Q: ho modellato una ComboBox. Vorrei che, a fronte della selezione di un elemento della lista fosse popolato un intero oggetto complesso come valore della selezione (ovvero vorrei poter definire un binding con un application data di tipo complesso). E' possibile?

A: No, in questa versione ciò non è possibile.

Q: ho visto che gli application data possono estendere il loro ciclo di vita in tre differenti modalità (singola azione, sessione, stessa pagina): quali sono le peculiarità delle differenti modalità e quando è consigliato usarne una piuttosto che l'altra?

A: La differenza sostanziale tra le tre modalità sta nel tempo per cui il valore contenuto è a disposizione della logica applicativa.

#### scope USER_ACTION

a fronte di un evento di interazioen utente, il valore dell'application data è viene caricato a partire dall'input utente, può essere utilizzato nella logica applicativa, e viene annullato al termine dell'interazione.

E' il tipo di scope che consuma meno memoria, ma è anche quello meno flessibile. Di fatto il suo utilizzo è opportuno in un insieme molto ristretto di casi.

#### scope USER_SESSION

il valore è mantenuto per tutta la durata della sessione applicativa, a meno che non sia annullato con un ClearAppDataCommand.

E' il tipo di scope che persiste maggiormente in memoria, diminuendo la scalabilità ma è anche quello più flessibile. Di fatto il suo utilizzo è opportuno in un insieme molto esteso di casi.

#### scope SAME_PAGE

il valore persiste in sessione e viene cancellato quando si esce dal ContentPanel corrente (con un JumpCommand o JumpExtCommand).

Attualmente il suo utilizzo è soggetto ad alcune limitazioni (in particolare occorre evitare i casi in cui lo stesso application data a scope SAME_PAGE è referenziato da due ContentPanel adiacenti, pena malfunzionamenti.

Q: Ho modellato una ComboBox con un collection-binding. La generazione e la compilazione terminano correttamente. Quando però lancio l'applicazione e il flusso arriva sulla schermata in questione si verifica un errore di runtime che impedisce la visualizzazione della schermata. Sul server inoltre i log riportano un errore relativo all'impossibilità di referenziare l'attributo 'list'. Qual'è il problema?

A: Questo problema si verifica quando l'application data collegato alla ComboBox (collection-binding) non è valorizzato: occorre almeno valorizzarlo con un `ArrayList` vuoto.