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

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 5
    Points
    5
    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 éminent

    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
    Points : 7 778
    Points
    7 778
    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
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 5
    Points
    5
    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 éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Tout à fait.

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 5
    Points
    5
    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 éminent

    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
    Points : 7 778
    Points
    7 778
    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.

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Oui cela semble bien fonctionner,
    mais à la soumission j'ai une erreur de type "IndexOutOfBoundsException".
    Si j'essaye de la debugger j'ai l'impression que le soucis viens de ma declaration de ma liste d'objets variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private List<Variable> listeVariables;
    et dans mon constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    listeVariables = new ArrayList<Variable>();
    Qu'en pense tu ?

  8. #8
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Ton problème vient des checkbox.

    Il faut initialiser le tableau de String multiCases dans la méthode reset de l'ActionForm comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void reset(ActionMapping mapping, HttpServletRequest request)
    {
       this.multiCases=new String[0] ;
    }

  9. #9
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    A bon je ne savais pas qu'il fallait une méthode reset dans mon action,
    et donc je n'en avait pas je l'ai implémenté de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	/**
             * Reset le tableau des coches.
             * @param mapping
             * @param request
             */
    	public void reset(ActionMapping mapping, HttpServletRequest request, ActionForm aform)
    	{
    		((AdministrationVariablesForm) aform).setMultiCases(new String[0]);
    	}
    Mais j'ai toujours mon erreur indexOutOfBound, voici mon log :

    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
     
    10/10/08 16:29:21 (ERROR)   : "Servlet.service()" pour la servlet a généré une exception
    java.lang.IndexOutOfBoundsException: Index: 3, Size: 0
    	at java.util.ArrayList.RangeCheck(ArrayList.java:546)
    	at java.util.ArrayList.get(ArrayList.java:321)
    	at org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUtilsBean.java:433)
    	at org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUtilsBean.java:340)
    	at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:684)
    	at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
    	at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:884)
    	at org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)
    	at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298)
    	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:493)
    	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    	at java.lang.Thread.run(Thread.java:595)

  10. #10
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    C'est dans l'ActionForm AdministrationVariablesForm qu'il faut coder la méthode reset et non pas dans l'Action.
    Et comme multiCases est une propriété de l'ActionForm, il faut l'initialiser avec le code que je t'ai donné précédemment soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void reset(ActionMapping mapping, HttpServletRequest request)
    {
       this.multiCases=new String[0] ;
    }

  11. #11
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    J'ai donc implémenté la méthode, dans la actionForm, comme tu me l'as indiquer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	public void reset()
    	{
    	   this.multiCases=new String[0] ;
    	}
    et je l'invoque dans le constructeur par :

    Et j'ai toujours la même erreur, je comprend pas bien j'avoue ..

  12. #12
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Il faut coder la méthode reset telle que je l'ai écrite avec les paramètres (ActionMapping mapping, HttpServletRequest request) et ne pas l'invoquer car elle est automatiquement appelée par Struts.

  13. #13
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Alors j'ai bien implémenté la méthode, comme tu me l'as indiquer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	public void reset(ActionMapping mapping, HttpServletRequest request)
    	{
    	   this.multiCases=new String[0] ;
    	}
    Dans mon ActionForm je ne l'invoque plus .

    Mais j'ai toujours mon exception.

    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
     
     
    java.lang.IndexOutOfBoundsException: Index: 3, Size: 0
    	at java.util.ArrayList.RangeCheck(ArrayList.java:546)
    	at java.util.ArrayList.get(ArrayList.java:321)
    	at org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUtilsBean.java:433)
    	at org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUtilsBean.java:340)
    	at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:684)
    	at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
    	at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:884)
    	at org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)
    	at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298)
    	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:493)
    	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:816)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    	at java.lang.Thread.run(Thread.java:595)
    J'ai meme mis un point d'arret dessus, et j'ai pus voir qu'elle est bien appellée, du coup je comprend pas pourquoi l'erreur est encore la ..


  14. #14
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Je voudrais juste reformuler le problème avec toi,
    le souci viens de mon arraylist qui n'a pas la même taille coté formulaire(client), que du coté action(serveur), c'est bien ca ?

  15. #15
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    En fait, je n'avais pas bien regardé le message d'erreur et ton problème est effectivement lié à l'ArrayList parce que tu as dû laisser le scope du form-bean à request dans le mapping de l'Action AdministrationVariablesAction dans le struts-config.xml.
    Si tu regardes bien mes réponses, tu constateras que j'avais précisé qu'il fallait mettre le scope du form-bean administrationVariablesForm à session.

    Pourquoi ? tout simplement parce que, lorsque tu initialises l'ArrayList d'objets dans l'Action, une requête est constituée . Et quand la jsp s'affiche, cette requête est terminée.
    Donc, si le form-bean est dans le scope request, quand tu soumets le formulaire, une nouvelle requête est constituée et l'ActionForm est réinitialisée. Du coup, la taille de l'ArrayList est égale à 0 et donc ne contient aucun objet. Il ne peut donc pas la mettre à jour.
    Ceci explique le message d'erreur.

    Par contre, je précise que l'ajout de la méthode reset dans l'ActionForm pour initialiser le tableau de String des checkbox est nécessaire.

  16. #16
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Salut,
    merci de ton aide je sens que est proche de la vérité ,

    Citation Envoyé par c_nvy Voir le message
    En fait, je n'avais pas bien regardé le message d'erreur et ton problème est effectivement lié à l'ArrayList parce que tu as dû laisser le scope du form-bean à request dans le mapping de l'Action AdministrationVariablesAction dans le struts-config.xml.
    Si tu regardes bien mes réponses, tu constateras que j'avais précisé qu'il fallait mettre le scope du form-bean administrationVariablesForm à session.
    Donc j'ai modifié le struts-config.xml, voila mes sections en rapport :
    Le form bean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <form-bean name="administrationVariablesForm"
                       type="application.moteurtarifaire.presentation.form.AdministrationVariablesForm" />
    Le forward :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            <forward name="variables" 
                     path="/administration_variables_action.do?action=init"
                     redirect="false" 
                     contextRelative="false" />
    Mon action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            <action path="/administration_variables_action"
                    type="application.moteurtarifaire.presentation.action.AdministrationVariablesAction"
                    name="administrationVariablesForm" 
                    validate="false" 
                    scope="session"
                    input="/WEB-INF/jsp/variables/administration_variables.jsp">
                <forward name="suivant"
                         path="/administration_variables_action.do" />
            </action>

    Citation Envoyé par c_nvy Voir le message
    Par contre, je précise que l'ajout de la méthode reset dans l'ActionForm pour initialiser le tableau de String des checkbox est nécessaire.
    Je l'ai bien laissée.
    Donc cela fonctionne je récupère bien ma liste du coté de mon action , mais il m'affiche un message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cannot find bean: "administrationVariablesForm" in scope: "request"
    Je vais essayer de mettre scope="request" dans mon form bean pour voir ce que cela donne.

    Merci de tes réponses claires et éclairantes

  17. #17
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Si tu veux récupérer la liste modifiée dans l'Action, il faut laisser le scope du form-bean à session dans le mapping de l'Action.
    Si d'ailleurs, tu as plusieurs Actions liées au formulaire administrationVariablesForm, il faut mettre scope="session" dans le mapping de toutes ces Actions dans le struts-config.xml.

    Vu le message d'erreur :
    Cannot find bean: "administrationVariablesForm" in scope: "request"
    tu as dû mettre dans un des tags de la jsp scope="request" pour administrationVariablesForm.
    Dans le tag en question, il faut donc mettre scope="session" à la place ou même ne pas le préciser du tout.

  18. #18
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Si tu veux récupérer la liste modifiée dans l'Action, il faut laisser le scope du form-bean à session dans le mapping de l'Action.
    Si d'ailleurs, tu as plusieurs Actions liées au formulaire administrationVariablesForm, il faut mettre scope="session" dans le mapping de toutes ces Actions dans le struts-config.xml.
    Et bien je n'ai qu'une seule action par page.

    Citation Envoyé par c_nvy Voir le message
    tu as dû mettre dans un des tags de la jsp scope="request" pour administrationVariablesForm.
    Dans le tag en question, il faut donc mettre scope="session" à la place ou même ne pas le préciser du tout.
    En effet, j'en avais bien un dans mon header, super .
    A présent je récupère bien ma liste mise a jour dans mon action, merci beaucoup.

    Bon je vais me documenter un peu plus sur les cas d'utilisation de scope="request" et scope="session", histoire de voir vraiment dans quel cas ils sont le plus adapter, si tu as un lien qui traine ..

    Merci encore de ton aide

    A bientôt.

  19. #19
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Je relance le sujet, car je rencontre un problème, a l'usage.
    En effet, ma page jsp est constitué de 3 formulaires :
    1. menu
    2. maj/del de variables
    3. ajout variable


    Mais la soumission de la page a besoin d'une propriété qui me permet de savoir dans quel mode je suis (ajout/ suppression / mise a jour), grace a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <html:hidden property="action" />
    .

    Ainsi a la soumission je set mon action en Java Script et je soumet avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    document.forms[form_nb].action.value = action;
    document.forms[form_nb].submit();
    Le soucis est que quand je soumet, mon nested:form, il ne rapatrie pas mon action, et me fait une erreur 500.

    Du coup ma question est comment avoir un html:hidden, qui soit accessible et utilisable par tous les form de ma page ??
    help needed

    Cordialement

  20. #20
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    action est un attribut du tag form.
    Il ne faut donc surtout pas appeler "action" une propriété de ton formulaire lorsque tu la modifies via du javascript.

    En lui donnant un autre nom, cela devrait mieux fonctionner.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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