IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

Formulaire n champs


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Par défaut Formulaire n champs
    Bonjour ,
    j'ai un petit soucis de mise en place pour un formulaire en struts.

    J'ai un formulaire auquel je passe une liste d'objets, que l'on affiche sous forme de textBox, l'utilisateur peut ainsi modifier autant d'élément qu'il le souhaite dans la liste, puis soumettre une fois et sauvegarder tous les changements.

    Le code de ma classe form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    //Mes imports
    public class AdministrationVariablesForm extends GenericForm {
     
    	//-----------------------------------------
    	private static Log log;
    	private static final long serialVersionUID = -1432824142921206960L;
    	private String codeCree;
    	private int idUniteSelect;
    	private String libelleCree;
    	private List<Variable> listeVariables;
    	// stockage des coches en cours
    	private String[] multiCases;
    	private String titre;
    	private List<LabelValueBean> uniteDispo;
    	//-----------------------------------------
     
    	/**
             * Constructeur
             */
    	public AdministrationVariablesForm()
    	{
    		super();
    		log = LogFactory.getLog(AbstractGenericDAO.class);
    		codeCree = null;
    		idUniteSelect = 0;
    		libelleCree = null;
    		listeVariables = new ArrayList<Variable>();
    		titre = null;
    		uniteDispo = new ArrayList<LabelValueBean>();
    	}
    //Mes getters et setters
    }
    Le code de mon action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    //Mes imports
    public class AdministrationVariablesAction extends AbstractGenericAction {
    	//-----------------------------------------
    	private static Log log;
    	private String action;
    	private List<String> listeVariableCoche;
    	// La liste des variables
    	private List<Variable> listeVariables;
    	private List<Variable> lv;
    	private IMoteurTarifaireFacade mofacad;
    	// Le tableau des coches
    	private String[] tab;
    	private List<LabelValueBean> uniteDispo;
    	//Liste des variable en retour de modif
    	private List<Variable> listeVariableModif;
    	private Variable variableModif;
    	//-----------------------------------------
     
    	/*
    	 * Constructeur.
    	 */
    	public AdministrationVariablesAction()
    	{
    		super();
    		log = LogFactory.getLog(AbstractGenericDAO.class);
    		this.mofacad = MoteurTarifaireFacadeImpl.get();
    		this.action = "defaut";
    		this.listeVariables = new ArrayList<Variable>();
    		this.uniteDispo = new ArrayList<LabelValueBean>();
    		this.listeVariableCoche = new ArrayList<String>();
    		this.listeVariableModif = new ArrayList<Variable>();
    		this.variableModif = new Variable();
    	}
     
    	/**
             * Execute une action.
             */
    	public ActionForward executeAction(ActionMapping mapping, ActionForm aform,
    			HttpServletRequest request, HttpServletResponse response)
    	throws Exception {
     
    		// On récupère le contenu de la requête action.
    		this.action = request.getParameter("action");
     
    		// Description des divers cas possibles sur la page.
    		if (this.action.equalsIgnoreCase(""))
    		{
    			log.debug("Action = null");
    		}
    		else if (this.action.equalsIgnoreCase("majListeVariables"))
    		{
    			log.debug("Action = Mise a jour de la liste des variables");
    			this.majTitre(request, aform);
    			this.majUpdateListeVariable(request, aform);
    			this.majListeUniteDispo(request, aform);
    			this.majListeVariables(request, aform);
    		}
    		return mapping.getInputForward();
    	}
     
    	/**
             * Méthode de récupération des modifications sur la liste des variables.
             * @param request
             * @param aform
             * @throws DAOException
             */
    	public void majUpdateListeVariable(HttpServletRequest request, ActionForm aform) throws DAOException
    	{
    		log.debug("Mise à jour des modifications sur la liste de varaibles");
    		listeVariableModif = ((AdministrationVariablesForm) aform).getListeVariables();
     
    		if(listeVariableModif.isEmpty())
    		{
    			log.debug("Aucune modif detectée");
    		}
    		else
    		{
    			for (int i = 0; i < listeVariableModif.size(); i++) {
    				variableModif = listeVariableModif.get(i);
    				log.debug("variable modifiée :"+variableModif.getCode()+" et libelle "+variableModif.getLibelle());
    			}
    		}
    	}
    }
    Alors j'explique ça plus brièvement :
    On passe une liste d'objet contenant des propriétés:
    -Un code
    -Un libelle
    -Une unité

    puis cela me génère un tableau avec un logic iterate, mon soucis est sur la récupération des modifications sur ce tableau.

    Voila toute idée ou aide est bienvenu.

  2. #2
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Utilise plutôt les tags nested comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <nested:iterate property="taListe">
       <nested:text property="code"/>
       <nested:text property="libelle"/>
       <nested:text property="unite"/>
    </nested:iterate>
    Lorsque tu soumettras le formulaire, la collection contiendra automatiquement les propriétés modifiées.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Par défaut
    Merci de ta réponse je vais tester de ce pas,
    mais cela signifie que quand je vais récupérer la valeur de ma liste du form, dans mon action, j'y trouverais mes modifs ?

  4. #4
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Tout à fait.

  5. #5
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Par défaut
    Alors,
    j'ai remplacé mes logic:iterate par des nested:iterate, avec succès dans mon code.

    cela me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    <nested:iterate name="administrationVariablesForm" property="listeVariables" id="item" indexId="index">
    	<tr>
    		                        <td align="right">
    			                        <nested:text  name="item" property="code"    indexed="true" ></nested:text>
    		                        </td>
    		                        <td align="right">
    		                           <nested:text name="item" property="libelle" indexed="true" ></nested:text>
    		                        </td>
    		                        <td align="right">
    			                        <logic:empty name="item" property="uniteDispoVar">
    			                            <p>
    	                                        <bean:message key="contenu.moteurTarifaire.contenu.liste.variables.liste.unite.vide" />  
    			                            </p>
    			                        </logic:empty>
    			                        <!-- Affichage des unité -->
    			                        <logic:notEmpty name="item" property="uniteDispoVar">
    			                            <html:select name="item" property="idUniteSelect" indexed="true" >
    			                                <html:optionsCollection  name="item" property="uniteDispoVar" />
    			                            </html:select>
    			                        </logic:notEmpty>
    		                        </td>
    		                        <!-- Gestion des coches -->
    		                        <td align="right">
    		                            <html:multibox property="multiCases" >
    		                                <bean:write name="item" property="code"/>
    		                            </html:multibox>
    		                        </td>
    	</tr>
    </nested:iterate>
    Cela me donne :
    1-Champ texte Code;2-Champ texte Libelle;3-Une select-box;4-Une checkbox .

    Dans mon action, je recupere ma liste par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    	public void majUpdateListeVariable(HttpServletRequest request, ActionForm aform) throws DAOException
    	{
    		log.debug("Mise à jour des modifications sur la liste de varaibles");
    		listeVariableModif = ((AdministrationVariablesForm) aform).getListeVariables();
     
    		if(listeVariableModif.isEmpty())
    		{
    			log.debug("Aucune modif detectée");
    		}
    		else
    		{
    			for (int i = 0; i < listeVariableModif.size(); i++) {
    				variableModif = listeVariableModif.get(i);
    				log.debug("variable modifiée :"+variableModif.getCode()+" et libelle "+variableModif.getLibelle());
    			}
    		}
    	}
    Malheureusement, listeVariableModif est toujours vide je ne sais pas trop ce que j'ai oublié, ça te dis quelque chose ?

    Merci encore, de ton aide.

  6. #6
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    L'attribut indexed="true" ne doit pas être utilisé dans le cas des tags nested car les propriétés indexées sont gérées automatiquement.
    Et pour que cela fonctionne, il ne faut pas non plus utiliser l'attribut name dans les tags nested mais par contre, il faut utiliser les tags nested aussi pour les combos et les checkbox et mettre les tags nested dans un tag nested:form.

    Essaie plutôt comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <nested:form action="pathDeTonAction">
     <nested:iterate property="listeVariables" id="item">
       <tr>
          <td align="right">
             <nested:text property="code"/>
          </td>
          <td align="right">
             <nested:text property="libelle"/>
          </td>
          <td align="right">
             <logic:empty name="item" property="uniteDispoVar">
             <p>
                <bean:message key="contenu.moteurTarifaire.contenu.liste.variables.liste.unite.vide" />  
             </p>
             </logic:empty>
             <!-- Affichage des unité -->
             <logic:notEmpty name="item" property="uniteDispoVar">
                  <nested:select property="idUniteSelect">
                        <nested:optionsCollection property="uniteDispoVar" />
                  </nested:select>
             </logic:notEmpty>
          </td>
          <!-- Gestion des coches -->
          <td align="right">
              <nested:multibox name="administrationVariablesForm" property="multiCases">
                  <nested:write property="code"/>
              </nested:multibox>
          </td>
       </tr>
     </nested:iterate>
    </nested:form>
    EDIT : sans oublier de mettre le scope du form-bean administrationVariablesForm à session dans le mapping de l'Action AdministrationVariablesAction dans le struts-config.xml.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. nom des formulaires et champs en paramètre?
    Par Athorus dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 17/08/2006, 18h10
  2. Réponses: 2
    Dernier message: 12/08/2006, 13h27
  3. [ODBC] Valider formulaire avec champs vides
    Par dorot dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 12/07/2006, 17h15
  4. Réponses: 1
    Dernier message: 20/03/2006, 13h30
  5. Réponses: 12
    Dernier message: 22/02/2006, 22h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo