Documentazione Contatti      
Documentazione > Tutorial > Struts: mini how-to all'uso delle indexed properties
Hide
Best Practices
EJB
Frameworks
Howto
J2EE
J2ME and Wireless
J2SE
JSP e Servlet
Java Application Server
Java IDE/Tools
Java Media
Java Security
Java Sys Admin
Java e XML
Java e SQL
OpenSource Java
Patterns
Repository
Tesi
UML
Web Services
Slide
White Paper di jws.it
project management
Eventi
Groovy



La lista delle risorse java essenziali


Aristotele
Lo scopo del lavoro è quello di guadagnarsi il tempo libero


JNDI (Java Naming and Directory Interface)



  Visualizza Commenti (1) Aggiungi Commento    
 
Struts: mini how-to all'uso delle indexed properties
By Giuseppe Peletti
7 giugno 2005

  Struts: mini how-to all'uso delle indexed properties

Questo documento non ha il pretenzioso scopo di spiegare qualcosa, solo di raccontare come ho risolto un problema che altre persone possono avere, infatti l'idea di questo articoletto è nata proprio sul forum di JavaPortal.

Il problema che ho dovuto risolvere è il seguente: gestire il submit di un form di n righe in cui una proprietà è rappresentata da un radiobutton.
Ad esempio recupero da un database un elenco di nominativi, li mostro in un form, e poi eseguo un update di quei dati.

Schema d'esempio:
database ---> action + actionForm ---> jsp (mostra i dati)
jsp ---> action + actionForm ---> database (update dei dati )


Un html form di questo tipo avra' associato un formBean le cui proprietà sono di tipo String array.
Esempio form: n righe del tipo
<input type="text" name="nome" >
<input type="radio" name="sex" value="m" >
<input type="radio" name="sex" value="f" >

Per ogni riga devo utilizzare gli stessi name per i campi, cosi' Struts precompilerà un formBean del tipo:

public class myForm extends ActionForm {
        String[] nome;
        String[] sex;

        // relativi setter e getter omessi
        }

Il problema nasce nel momento in cui ho appunto piu' di una riga nel form html: il radiobutton sarà mutualmente esclusivo per tutto il form e non per ogni singola riga; questo è dovuto al fatto che su ogni riga i radiobutton hanno gli stessi nomi.
Per ovviare a questo inconveniente utilizzo una indexed property per descrivere i radiobutton sia nel bean che nel form html.

Il nuovo bean sara':

public class myForm extends ActionForm {
String[] nome;
String[] sex;

        public void setStringIndexed( int index, String value ) {
                this.sex[index] = value;
        }

        public String getStringIndexed( int index ) {
                return this.sex[index];
        }
        // setter e getter per nome invariate
  }

La action precompila il formBean con i dati derivanti da database.
Quando dovra' precompilare il campo "sex" chiamerà il metodo setStringIndexed settando un valore diverso per ogni entry.
Ad esempio:


........
// ciclo per ogni record derivante da database
int i = 0;
while( rs.next() ) {

formBean.setStringIndexed(i, ""+i);
i++;

}
.......


L'importante è che ogni valore di stringIndexed sia univoco.
Cosi' facendo (anche se non ho il campo "sex" nel database) ho un formBean con proprietà String array di lunghezza n, e uno stringIndexed con valori tutti diversi.

Nella jsp invece avro' qualcosa del tipo:


  <%
        (for int i = 0; i < formBean.getNome().length; i++){
        %>
                <input type="text" name="nome" >
                <input type="radio" name="<%=myForm.getStringIndexed(i)%>" value="m" >
                <input type="radio" name="<%=myForm.getStringIndexed(i)%>" value="f" >
        <%
        }%>

Questo è tutto!.
Nella action recupero il formBean come sempre fatto, e recupero una ad una le proprietà.

Spero che questo documento possa essere intellegibile ed utile a qualcuno.
I consigli e suggerimenti sono sempre ben accetti.

link di riferimento all'how to ufficiale di struts:

http://jakarta.apache.org/struts/faqs/indexedprops.html




JavaPortal è ideato da:    
K-Tech Logo










LICENZA



Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati sotto licenza Creative Commons

Sitemap  © 2002-2004 Copyright Information. Privacy . Today is sabato 19 giugno 2010