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 :

[Struts:Layout] collection de checkbox


Sujet :

Struts 1 Java

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Points : 15
    Points
    15
    Par défaut [Struts:Layout] collection de checkbox
    Bonjour,

    je sais qu'il s'agit d'un problème classique mais je n'arrive pas à m'en dépêtrer :

    De ma base de données j'extrait une liste de caracteristiques activées ou non que je transforme en une collection de beans ObjectLib dont les propriétés sont en gros :

    - ObjectLib.label contient le libellé de la caractéristique
    - ObjectLib.value contient 1 ou 0 suivant l'état de la caractéristique (activée ou non)

    dans mon actionform il y a un attribut boardSitLibs de type Vector<ObjectLib>
    et le setter et getter qui vont avec.

    dans mon jsp j'ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    							<layout:collection property="boardSitLibs" id="boardSitLibs" indexId="index" align="left"  >
    								<layout:collectionItem title="" >
    									<layout:checkbox property="boardSitLibs[${index}].value" layout="false" />
    								</layout:collectionItem>
    								<layout:collectionItem property="label"/>
    							</layout:collection>
    voici ce que cela donne dans la source html :

    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
    <tr valign="top"><th></th></tr> 
    <tr> 
    								<td> 
    									<input type="checkbox" name="boardSitLibs[0].value" value="on"> 
    								</td> 
    								<td>posée sous un arbre / un buisson</td> 
    							</tr><tr> 
    								<td> 
    									<input type="checkbox" name="boardSitLibs[1].value" value="on"> 
    								</td> 
    								<td>posée en terrain dégagé</td> 
    							</tr><tr> 
    								<td> 
    									<input type="checkbox" name="boardSitLibs[2].value" value="on"> 
    								</td> 
    								<td>posée contre un mur</td> 
    							</tr><tr> 
    								<td> 
    									<input type="checkbox" name="boardSitLibs[3].value" value="on"> 
    								</td> 
    								<td>posée sur la terre nue</td> 
    							</tr><tr> 
    								<td> 
    									<input type="checkbox" name="boardSitLibs[4].value" value="on"> 
    								</td> 
    								<td>posée sur le gazon</td> 
    							</tr><tr> 
    								<td> 
    									<input type="checkbox" name="boardSitLibs[5].value" value="on"> 
    								</td> 
    								<td>posée sur des feuilles mortes</td> 
    							</tr><tr> 
    								<td> 
    									<input type="checkbox" name="boardSitLibs[6].value" value="on"> 
    								</td> 
    								<td>posée sur un terrain en friche</td> 
    							</tr></table></td></tr></table>
    donc deux choses ne vont pas : d'une part il n'a pas mappé l'état de chaque caractéristique (tous les checkbox sont désélectionnées)

    et d'autre par il me met le message d'erreur suivant quand je soumet

    : org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:515)

    qu'en pensez vous?

    merci,

    Olivier

  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
    Si tu veux que les checkbox soient cochées lorsque value est égale à 1, il faut ajouter value="1" dans le tag layout:checkbox comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <layout:collection property="boardSitLibs" id="boardSitLibs" indexId="index" align="left">
       <layout:collectionItem title="">
          <layout:checkbox property="boardSitLibs[${index}].value" value="1" layout="false"/>
       </layout:collectionItem>
       <layout:collectionItem property="label"/>
    </layout:collection>
    Le problème qui va se poser c'est que lorsque tu vas décocher une checkbox, sa valeur n'étant pas renvoyée au submit du formulaire, elle gardera la valeur 1.
    Il faudrait donc initialiser les value de tous les objets ObjectLib de la liste à 0 dans la méthode reset de l'ActionForm.

    Sinon, au sujet de l'erreur au submit du formulaire, as-tu mis le scope du form-bean à session dans le mapping de l'Action ?
    Si c'est bien le cas, peux-tu donner la stacktrace complète de l'erreur ?

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    bonjour,

    merci beaucoup pour ta réponse c_nvy et au passage pour toutes celles que tu as postée sur ce forum.

    alors donc j'ai ajouté value="1" comme tu me l'as indiqué et cela fonctionne les cases sont bien cochées.

    j'ai par ailleurs implémenté la méthode reset de mon boardForm comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		System.out.println("RESETBOARD");
     
    		//initialisation des valeurs de boardSitLibs à 0
    		for(int i=0 ; i<this.boardSitLibs.size() ; i++) {
    			this.boardSitLibs.get(i).setValue(0);
    		}
    mais tout ne fonctionne pas :

    quand je met le scope du form-bean à session dans le mapping de l'Action comme ceci dans l'extrait suivant (InitBoard) :
    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
     
    		<action path="/InitBoard"
    		type="fr.mnhn.opj.struts.action.InitBoardAction"
    		name="boardForm" validate="false"
    		scope="session">
    			<set-property property="loginRequired" value="true"/>	
    			<forward name="succes" path="/boardFormAdd.jsp"/>
    			<forward name="error" path="/jardinProjetMenu.jsp"/>
        </action>
     
    		<action path="/AddBoard"
    		type="fr.mnhn.opj.struts.action.AddBoardAction"
    		name="boardForm" validate="true" input="/boardFormAdd.jsp"
    		scope="request">
    			<set-property property="loginRequired" value="true"/>	
    			<forward name="succes" path="/JardinProjetMenu.do"/>
    			<forward name="confirme" path="/boardFormAdd.jsp"/>
    			<forward name="error" path="/JardinProjetMenu.do"/>
        </action>
    alors rien n'est affiché dans mon jsp et chose curieuse dans ma console je vois que la méthode reset est appellée deux fois puisque j'ai deux fois RESETBOARD d'écrit. comme si un nouveau boardForm avait été créé et avec lui un nouveau vecteur BoardSitLibs vide (ça c'est normal) et donc rien n'est affiché. Pourquoi ce nouveau reset? pourquoi boardsitlibs est il vide?

    si le scope de initboard est à request alors tout s'affiche bien, mais quand je clique sur valider alors j'ai toujours mon message d'erreur :

    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
    RESETBOARD
    26 janv. 2009 11:53:24 org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: "Servlet.service()" pour la servlet action a généré une exception
    java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 3
    	at java.util.Vector.get(Unknown Source)
    	at org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:521)
    	at org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:428)
    	at org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils.java:770)
    	at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:801)
    	at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:881)
    	at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
    	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1252)
    	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    	at java.lang.Thread.run(Unknown Source)
    à noter que le 3 correspond à la checkbox que j'ai cochée est ce un problème avec mes getters et setters de mon boardForm? je le met :

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    package fr.mnhn.opj.struts.form;
     
    import java.util.Date;
    import java.util.Vector;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
     
    import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
     
    import fr.mnhn.opj.bo.Board;
    import fr.mnhn.opj.bo.Garden;
    import fr.mnhn.opj.bo.ObjectLib;
    import fr.mnhn.opj.bo.SpeciesGroupSurveyPair;
    import fr.mnhn.opj.sql.OpjStackError;
    import fr.mnhn.opj.sql.SqlServer;
    import fr.mnhn.opj.util.OPJActionMapping;
    import fr.mnhn.opj.bo.BoardSituations;
     
    public class BoardForm extends ActionForm {
     
    	/** @see java.io.Serializable */
    	private static final long serialVersionUID = -8117756176957974936L;
     
    	private Board board;
     
    	private int id;
    	private String boardName;
    	private double boardW;
    	private double boardL;
    	private String boardEnable;	
    	private Date update;
    	private Date create;
    	private int gardenFk;
    	private Vector<ObjectLib> boardSitLibs = new Vector<ObjectLib>();
     
    	/**************************/	
     
    	public int getId() {
    		return id;
    	}
     
    	public void setId(int g) {
    		id = g;
    	}
     
    	public String getBoardName() {
    		return boardName;
    	}
     
    	public void setBoardName(String g) {
    		boardName = g;
    	}
     
    	public double getBoardW() {
    		return boardW;
    	}
     
    	public void setBoardW(double g) {
    		boardW = g;
    	}
     
    	public double getBoardL() {
    		return boardL;
    	}
     
    	public void setBoardL(double g) {
    		boardL = g;
    	}
     
    	public String getBoardEnable() {
    		return boardEnable;
    	}
     
    	public void setBoardEnable(String g) {
    		boardEnable = g;
    	}
     
    	public Date getUpdate() {
    		return update;
    	}
     
    	public void setUpdate(Date g) {
    		update = g;
    	}
     
    	public Date getCreate() {
    		return create;
    	}
     
    	public void setCreate(Date g) {
    		create = g;
    	}
     
    	public int getGardenFk() {
    		return gardenFk;
    	}
     
    	public void setGardenFk(int g) {
    		gardenFk = g;
    	}
     
    //	public String getBoardSitLibId(int i) {
    //		return boardSitLibId[i];
    //	}
    //
    //	public void setBoardSitLibId(int i, String bslId) {
    //		this.boardSitLibId[i] = bslId;
    //	}
    //	
    //	public String getboardSitLibName() {
    //		return boardSitLibName;
    //	}
    //
    //	public void setboardSitLibName(String boardSitLibName) {
    //		this.boardSitLibName = boardSitLibName;
    //	}
     
    	public Board getBoard(){
    		return this.board;
    	}
    	public void setBoardSitLibs(Vector<ObjectLib> boardSituations) {
    		this.boardSitLibs = boardSituations;
    	}
    	public Vector<ObjectLib> getBoardSitLibs() {
    		return this.boardSitLibs;
    	}
     
    	/**
             * Initialisation du formulaire (se produit lors de la consultation
             *  de ce dernier, est donc relatif à la portée qu'on lui donne : 
             *  scope, page, request, session)
             * @param mapping
             *      <em>Calque</em> des {@link org.apache.struts.action.Action} 
             * sur le fonctionnement de contrôleur dans lequel s'inscrit 
             * ce formulaire
             * @param request
             *      Requête à partir de laquelle le formulaire est construit
             */
    	public void reset(ActionMapping mapping, HttpServletRequest request) {
    		System.out.println("RESETBOARD");
     
    		//initialisation des valeurs de boardSitLibs à 0
    		for(int i=0 ; i<this.boardSitLibs.size() ; i++) {
    			this.boardSitLibs.get(i).setValue(0);
    		}
     
    //		OpjStackError stackError = new OpjStackError();
    //		SqlServer sqlServer = new SqlServer(stackError);
    //		try {sqlServer.getDataSource(SqlServer.DATA_SOURCE);
    //		
    //		//si on trouve un objet Board est présent, on est donc en phase
    //		//d'édition et l'on remplit le BoardForm
    //		if(request.getSession().getAttribute("BOARD")!=null) {
    //			System.out.println("RESETBOARD");
    //			this.board = (Board)request.getSession().getAttribute("BOARD");
    //			this.id = board.getId();
    //			this.boardName = board.getBoardName();
    //			this.boardW = board.getBoardW();
    //			this.boardL = board.getBoardL();
    //			this.boardEnable = board.getBoardEnable();
    //			this.gardenFk = board.getGardenFk();
    //			
    //
    //		}
    //		//sinon il s'agit de créer un objet Board alors le BoardForm est vide
    //		else {
    //			this.boardName = "";
    //			this.boardW = 0;
    //			this.boardL = 0;
    //			this.boardEnable = "";
    //			this.gardenFk = 0;
    //		}
    //		} catch(Exception e) {
    //
    //		} finally {
    //			sqlServer.logoff();
    //		}
    	}		
     
    	public ActionErrors validate (ActionMapping mapping, HttpServletRequest request) {
    		ActionErrors errors = new ActionErrors();
    		OPJActionMapping opjMapping = (OPJActionMapping)mapping ;
    		HttpSession session = request.getSession();
    		// Cette action nécessite-t-elle l'identification de l'utilisateur ?
     
    		System.out.println("VALIDATE");
    		this.toString();
     
    		if (opjMapping.isLoginRequired()) {
    			if (session.getAttribute("USER") == null) {
    				// retourner null force l'action à traiter l'erreur de login
    				return null;
    			}
    		}
    		//Si le nom de la planche est nul ou de longueur nulle,
    		//on renvoie une erreur accolée au nom de la planche
    		if ((boardName == null) || (boardName.length() < 1)) {
    			errors.add("boardName", new ActionError("error.boardName.required"));
    		} else if (boardW <= 0) {
    			errors.add("boardW", new ActionError("error.boardW.required"));
    		} else if (boardL <= 0) {
    			errors.add("boardL", new ActionError("error.boardL.required"));
    		} else {
    		//Sinon le nom du jardin, la largeur, la longueur sont valides
    			//si il s'agit d'une edition de board
    			if(this.board != null){
    				//si le nom a été modifié
    				if(!boardName.equals(this.board.getBoardName())) {
    					//on vérifie que ce nom n'est pas déjà attribué à une
    					//planche de l'utilisateur
    					Garden garden = (Garden)session.getAttribute("GARDEN");
    					//si il y a une liste d'objet Boards dans l'objet Garden courrant
    					if(garden.getBoards().size()!=0){
    						//si il y a un objet Board dans la liste qui a le même nom que le boardName actuel
    						if(garden.getBoardByBoardName(boardName)!=null){
    							errors.add("boardName", new ActionError("error.boardName.double", boardName));
    						}
    					}
    				}
    			}			
    		}
    		return errors;
    	}
    	/**
             * Renvoie une chaîne de caractères décrivant l'objet
             * @return chaîne de caractères
             */
    	public String toString() {
    		String retour = new String();
    		retour = retour + "BoardForm {";
    		retour = retour + "\n	" + "boardPk=" + getId();
    		retour = retour + "\n	" + "boardName=" + getBoardName();
    		retour = retour + "\n	" + "boardW=" + getBoardW();
    		retour = retour + "\n	" + "boardL=" + getBoardL();
    		retour = retour + "\n	" + "boardEnable=" + getBoardEnable();		
    		retour = retour + "\n	" + "gardenupdate=" + getUpdate();
    		retour = retour + "\n	" + "gardencreate=" + getCreate();
    		retour = retour + "\n	" + "gardenFk=" + getGardenFk();
    		retour = retour + "\n" + "}";
    		return retour;
    	}
     
    }

  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
    Citation Envoyé par Roievil Voir le message
    merci beaucoup pour ta réponse c_nvy et au passage pour toutes celles que tu as postée sur ce forum.
    De rien.

    Concernant ton problème, mets le scope du form-bean à session dans le mapping des deux Actions et modifie la méthode reset comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
          if ( this.boardSitLibs != null )
          {   
    		//initialisation des valeurs de boardSitLibs à 0
    		for(int i=0 ; i<this.boardSitLibs.size() ; i++) {
    			this.boardSitLibs.get(i).setValue(0);
    		}
          }

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    Ok bon alors comme je te disais mon problème maintenant c'est que rien ne ma liste de checkboxes ne s'affiche pas dans la jsp : à l'endroit correspondant à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    				<layout:row>
    					<layout:column>
    						<%-- Saisie des observations pour les espèces de papillons de la brochure --%>
    						<layout:cell styleClass="decorationBrochure">
    							<%-- Parcours de la collection d'espèces de papillons de la brochure --%>
    							<layout:collection property="boardSitLibs" id="boardSitLibs" indexId="index" align="left">
    							   <layout:collectionItem title="">
    							      <layout:checkbox property="boardSitLibs[${index}].value" value="1" layout="false"/>
    							   </layout:collectionItem>
    							   <layout:collectionItem property="label"/>
    							</layout:collection>
    						</layout:cell>
    					</layout:column>
    				</layout:row>
    j'ai dans la jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    					</table></td> 
     
    				</tr></table></td></tr>
    ce qui laisse entendre que le vecteur boardSitLibs est vide au moment où je demande d'afficher le boardFormAdd.jsp .

    actuellement la séquence des évenements est la suivante :

    InitBoard.do est appellé il transmet le flux à InitBoardAction qui va créer une instance de BoardForm et remplir son vecteur boardSitLibs avec les infos récupérées dans la base et puis c'est boardFormAdd.jsp qui est appellé et qui affiche la liste de checkbox peuplée des informations de la base et puis suite au valider c'est /AddBoard qui est appellé et qui va se charger de répercuter les modifications de Board ou sa création dans la base.

    sauf que à un moment la liste de checkboxes ne s'affiche pas.

    je valide quand même après avoir rempli le formulaire et dans la console on a 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
    projectId : 2
    Requete loadBoards pour le jardin : des Plantes
    Requete loadBoards : select BOARDPK,BOARDNAME,BOARDW,BOARDL,BOARDENABLE,BOARDCREATE,BOARDUPDATE,GARDENFK from BOARD where gardenfk=8513
    RESETBOARD
    initBoard
    Requete loadAllBoardSitLib
    Requete loadAllBoardSitLib : select BOARDSITLIBPK,BOARDSITLIB from BOARDSITLIB order by BOARDSITLIBPK
    strBoardId : null
    RESETBOARD
    RESETBOARD
    VALIDATE
    SqlServer.createBoard insert into BOARD(BOARDPK,BOARDNAME,BOARDW,BOARDL,BOARDENABLE,BOARDCREATE,BOARDUPDATE,GARDENFK) values (42,'test2',1.0,3.0,1,TO_DATE('2009-01-26 13:54:58','YYYY-MM-DD HH24:MI:SS'),null,8513)
    SqlServer.deleteAllBoardSituations delete BOARDSITUATION where boardfk=42
    commit 
    target : succes
    projectId : null
    Requete loadBoards pour le jardin : des Plantes
    Requete loadBoards : select BOARDPK,BOARDNAME,BOARDW,BOARDL,BOARDENABLE,BOARDCREATE,BOARDUPDATE,GARDENFK from BOARD where gardenfk=8513
    RESETBOARD est présent trois fois, normal?

    P.S. : dans le code que tu m'as donné dans le dernier message j'ai changé ^= en != c'est cela non? Et dans la trace que j'affiche au dessus, les deux null sont normaux

  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
    Euh oui, désolée pour le ^= à la place du !=, je me suis trompée de language.

    Tu n'aurais pas codé un new BoardForm() quelque part dans une de tes Actions par hasard ?

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    Bon alors j'ai essayé le mode débuggage de eclipse mais sans grand succès.

    Ceci dit avec des println j'ai remarqué que le boardForm n'était pas bien transmis de InitBoardAction à boardFormAdd.jsp, j'avoue que je ne sais pas où il est décrit que l'objet boardForm de InitBoardAction doit etre transmis à boardFormAdd.jsp

    j'ai rajouté quelques println dans la méthode reset du BoardForm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		System.out.println("boardEnable : " + this.boardEnable);
    		System.out.println("RESETBOARD");
     
    	      if ( this.boardSitLibs != null )
    	      {   
    			//initialisation des valeurs de boardSitLibs à 0
    			for(int i=0 ; i<this.boardSitLibs.size() ; i++) {
    				this.boardSitLibs.get(i).setValue(0);
    			}
    	      }
    boardEnable est un champs string du boardForm que j'initialise a "1" dans mon initBoardAction (et je l'imprime)

    et voici ce que j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    boardEnable : null
    RESETBOARD
    initBoardAction
    boardEnable : 1
    boardFormAdd.jsp
    boardEnable : null
    RESETBOARD
    comment cela se fait?

    voici mon struts-config.xml :

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    <?xml version="1.0"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
    <struts-config>
     
      <data-sources>
      </data-sources>
     
      <form-beans>
    		<form-bean name="loginForm" type="fr.mnhn.opj.struts.form.LoginForm" />  
    		<form-bean name="firstTimeLoginForm" type="fr.mnhn.opj.struts.form.FirstTimeLoginForm" />
    		<form-bean name="userForm" type="fr.mnhn.opj.struts.form.UserForm" />  
    		<form-bean name="gardenForm" type="fr.mnhn.opj.struts.form.GardenForm" />  
    		<form-bean name="surveyForm" type="fr.mnhn.opj.struts.form.SurveyForm" />
    		<form-bean name="surveyEditForm" type="fr.mnhn.opj.struts.form.SurveyEditForm" />
    		<form-bean name="passwordForm" type="fr.mnhn.opj.struts.form.PasswordForm" />
    		<form-bean name="emailForm" type="fr.mnhn.opj.struts.form.EmailForm" />
    		<form-bean name="SearchTownForm" type="fr.mnhn.opj.struts.form.SearchTownForm" />
    		<form-bean name="ForgottenPasswordForm" type="fr.mnhn.opj.struts.form.ForgottenPasswordForm" />
    		<form-bean name="boardForm" type="fr.mnhn.opj.struts.form.BoardForm" />
      </form-beans>
     
      <global-exceptions>
      </global-exceptions>
     
      <global-forwards>
    		<forward name="login" path="/accueil.jsp"/>  
      </global-forwards>
     
      <action-mappings>
     
    		<action path="/Login" 
    		type="fr.mnhn.opj.struts.action.LoginAction" name="loginForm"
    		validate="true" input="/accueil.jsp" scope="request">
    			<set-property property="loginRequired" value="true"/>
    			<forward name="succes" path="/JardinsListe.do"/>
    			<forward name="error" path="/accueil.jsp"/>
     	</action>
     
     		<action path="/ResendPassword"
     		type="fr.mnhn.opj.struts.action.ResendPasswordAction"
     		name="ForgottenPasswordForm" scope="request"
     		input="/oubliPasse.jsp">
    			<forward name="succes" path="/accueil.jsp"/>
    			<forward name="error" path="/oubliPasse.jsp"/>
        </action>	
     
    		<action path="/SearchTown"
    		type="fr.mnhn.opj.struts.action.SearchTownAction"
    		name="SearchTownForm" input="/jardinFormAdd.jsp"
    		scope="request">
    			<set-property property="loginRequired" value="true"/>
    			<forward name="succes" path="/JardinsListe.jsp"/>
    			<forward name="error" path="/JardinsListe.jsp"/>
     	</action> 		
     
    		<action path="/JardinsListe"
    		type="fr.mnhn.opj.struts.action.JardinsListeAction"
    		scope="request">
    			<set-property property="loginRequired" value="true"/>			
    			<forward name="addJardin" path="/jardinFormAdd.jsp"/>
    			<forward name="listeJardin" path="/jardinsListe.jsp"/>				
    			<forward name="menuJardin" path="/JardinMenu.do"/>
    			<forward name="error" path="/accueil.jsp"/>				
        </action> 		  
     
    		<action path="/JardinMenu"
    		type="fr.mnhn.opj.struts.action.JardinMenuAction"
    		scope="request">
    			<set-property property="loginRequired" value="true"/>			
    			<forward name="succes" path="/jardinMenu.jsp"/>	
    			<forward name="error" path="/accueil.jsp"/>			
        </action> 
     
        	<action path="/JardinProjetMenu"
    		type="fr.mnhn.opj.struts.action.JardinProjetMenuAction"
    		scope="request">
    			<set-property property="loginRequired" value="true"/>			
    			<forward name="succes" path="/jardinProjetMenu.jsp"/>	
    			<forward name="error" path="/accueil.jsp"/>			
        </action> 
     
    		<action path="/AddUser"
    		type="fr.mnhn.opj.struts.action.AddUserAction"
    		name="firstTimeLoginForm" validate="true"
    		input="/logginForm.jsp" scope="request">
    			<forward name="succes" path="/inscriptionOK.jsp"/>
    			<forward name="loggin" path="/accueil.jsp"/>
    			<forward name="error" path="/logginForm.jsp"/>
        </action>
     
    		<action path="/AddGarden"
    		type="fr.mnhn.opj.struts.action.AddGardenAction"
    		name="gardenForm" validate="true" input="/jardinFormAdd.jsp"
    		scope="request">
    			<set-property property="loginRequired" value="true"/>	
    			<forward name="add" path="/EditGarden.do"/>
    			<forward name="init" path="/jardinFormAdd.jsp"/>
    			<forward name="search" path="/jardinFormAdd.jsp"/>
    			<forward name="update" path="/JardinMenu.do"/>
    			<forward name="errorCP" path="/jardinFormAdd.jsp"/>
    			<forward name="errorGarden" path="/jardinFormAdd.jsp"/>
    			<forward name="error" path="/JardinsListe.do"/>
        </action>    	
     
    		<action path="/EditGarden"
    		type="fr.mnhn.opj.struts.action.EditGardenAction"
    		name="gardenForm" validate="false" scope="request">
    			<set-property property="loginRequired" value="true"/>
    			<forward name="succes" path="/jardinFormUpdate.jsp"/>
    			<forward name="error" path="/JardinsListe.do"/>
       	</action>	
     
    		<action path="/UpdateGarden"
    		type="fr.mnhn.opj.struts.action.UpdateGardenAction"
    		name="gardenForm" validate="true"
    		input="/jardinFormUpdate.jsp" scope="request">
    			<set-property property="loginRequired" value="true"/>	
    			<forward name="succes" path="/JardinsListe.do"/>
    			<forward name="error" path="/jardinFormUpdate.jsp"/>
        </action>    	
     
    		<action path="/InitBoard"
    		type="fr.mnhn.opj.struts.action.InitBoardAction"
    		name="boardForm" validate="false"
    		scope="session">
    			<set-property property="loginRequired" value="true"/>	
    			<forward name="succes" path="/boardFormAdd.jsp"/>
    			<forward name="error" path="/jardinProjetMenu.jsp"/>
        </action>
     
    		<action path="/AddBoard"
    		type="fr.mnhn.opj.struts.action.AddBoardAction"
    		name="boardForm" validate="true" input="/boardFormAdd.jsp"
    		scope="session">
    			<set-property property="loginRequired" value="true"/>	
    			<forward name="succes" path="/JardinProjetMenu.do"/>
    			<forward name="confirme" path="/boardFormAdd.jsp"/>
    			<forward name="error" path="/JardinProjetMenu.do"/>
        </action>
     
    		<action path="/UpdatePassword"
    		type="fr.mnhn.opj.struts.action.UpdatePasswordAction"
    		name="passwordForm" validate="true" input="/profilUpdate.jsp"
    		scope="request">
    			<set-property property="loginRequired" value="true"/>	
    			<forward name="succes" path="/profilUpdateOK.jsp"/>
    			<forward name="error" path="/profilUpdate.jsp"/>
        </action>
     
    		<action path="/UpdateEmail"
    		type="fr.mnhn.opj.struts.action.UpdateEmailAction"
    		name="emailForm" validate="true" input="/profilUpdate.jsp"
    		scope="request">
    			<set-property property="loginRequired" value="true"/>	
    			<forward name="succes" path="/profilUpdateOK.jsp"/>
    			<forward name="error" path="/profilUpdate.jsp"/>
        </action>
     
    		<action path="/SurveyListe"
    		type="fr.mnhn.opj.struts.action.SurveyListeAction"
    		scope="request">
    			<set-property property="loginRequired" value="true"/>			
    			<forward name="succes" path="/surveyFormAdd.jsp"/>
    			<forward name="error" path="/surveyFormAdd.jsp"/>
        </action> 
     
    		<action path="/AddSurvey"
    		type="fr.mnhn.opj.struts.action.AddSurveyAction"
    		name="surveyForm" validate="true" input="/surveyFormAdd.jsp"
    		scope="request">
    			<set-property property="loginRequired" value="true"/>	
    			<forward name="succes" path="/JardinProjetMenu.do"/>
    			<forward name="confirme" path="/surveyFormAdd.jsp"/>
    			<forward name="error" path="/JardinProjetMenu.do"/>
        </action>
     
    <!--		<action path="/ViewAllSurvey"-->
    <!--		type="fr.mnhn.opj.struts.action.ViewAllSurveyAction" -->
    <!--		scope="request">-->
    <!--			<set-property property="loginRequired" value="true"/>			-->
    <!--			<forward name="succes" path="/allSurvey.jsp"/>	-->
    <!--			<forward name="error" path="/JardinsListe.do"/>			-->
    <!--    </action>-->
     
    		<action path="/UpdateSurvey"
    		type="fr.mnhn.opj.struts.action.UpdateSurveyAction"
    		name="surveyForm" validate="true"
    		input="/surveyFormUpdate.jsp" scope="request">
    			<set-property property="loginRequired" value="true"/>
    			<forward name="succes" path="/JardinProjetMenu.do"/>
    			<forward name="error" path="/JardinProjetMenu.do"/>
       	</action>
     
       		<action path="/MonthlyReport"
    		type="fr.mnhn.opj.struts.action.MonthlyReportAction"
    		scope="request">
    			<set-property property="loginRequired" value="true"/>			
    			<forward name="succes" path="/monthlyReportChart.jsp"/>	
    			<forward name="error" path="/JardinsListe.do"/>			
        </action>
     
             <action path="/AnnualReport"
    		type="fr.mnhn.opj.struts.action.AnnualReportAction"
    		scope="request">
    			<set-property property="loginRequired" value="true"/>			
    			<forward name="succes" path="/annualReport.jsp"/>	
    			<forward name="error" path="/JardinsListe.do"/>			
        </action>
     
             <action path="/SpecificReport"
    		type="fr.mnhn.opj.struts.action.AnnualSpecificReportAction"
    		scope="request">
    			<set-property property="loginRequired" value="true"/>			
    			<forward name="succes" path="/specificReportChart.jsp"/>	
    			<forward name="error" path="/JardinsListe.do"/>			
        </action>
     
             <action path="/WealthReport"
    		type="fr.mnhn.opj.struts.action.AnnualWealthReportAction"
    		scope="request">
    			<set-property property="loginRequired" value="true"/>			
    			<forward name="succes" path="/wealthReportChart.jsp"/>	
    			<forward name="error" path="/JardinsListe.do"/>			
        </action>     
     
      </action-mappings>
     
      <controller/>
     
      <message-resources parameter="fr.mnhn.opj.util.ApplicationResources"/>  
    </struts-config>
    mon initBoardAction :

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    package fr.mnhn.opj.struts.action;
     
    import java.io.IOException;
    import java.util.Vector;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
     
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
     
    import fr.mnhn.opj.bo.Board;
    import fr.mnhn.opj.bo.BoardSituations;
    import fr.mnhn.opj.bo.Garden;
    import fr.mnhn.opj.bo.ObjectLib;
    import fr.mnhn.opj.sql.OpjStackError;
    import fr.mnhn.opj.sql.SqlServer;
    import fr.mnhn.opj.struts.form.BoardForm;
    import fr.mnhn.opj.util.OPJActionMapping;
     
     
    /** Action d'intialisation du formulaire de description de la planche */
    public class InitBoardAction extends Action {
     
    	/** Accès aux données */
    	private SqlServer sqlServer;
     
    	/** Pile d'erreurs lors de l'accès aux données */ 
    	private OpjStackError stackError;
     
    	/**
             * completion du champ value de l'objet BoardSitlib contenu dans le
             * vecteur boardSitLibs quand il existe un objet BoardSituations 
             * correspondant 
             * @param allBoardSitLib
             * @param bs
             */
    	public void completeBoardSitLib(Vector<ObjectLib> allBoardSitLib, Vector<BoardSituations> bs){
    		ObjectLib currentObjectLib;
    		//parcours des ObjectLibs
    		for(int i=0 ; i<allBoardSitLib.size() ; i++) {
    			currentObjectLib = allBoardSitLib.get(i);
    			// parcours des BoardSituations
    			for(int j=0 ; j<bs.size() ; i++) {
    				//si l'on trouve un objet BoardSituations correspondant à l'objet
    				//ObjectLib courant alors on change sa value à 1
    				if(currentObjectLib.getId() == bs.get(j).getBoardSitLibFk() || i==2){
    					currentObjectLib.setValue(1);
    				}
    			}
    		}
    	}
     
     
    	public ActionForward execute(
    			ActionMapping mapping, 
    			ActionForm form, 
    			HttpServletRequest request, 
    			HttpServletResponse response
    	) throws IOException, ServletException {	
    		// cible par défaut en cas de succès
    		String target = new String("succes");
    		OPJActionMapping opjMapping = (OPJActionMapping)mapping;
    		// Cette action nécessite-t-elle l'identificateur de l'utilisateur ?
    		//On admettra que oui...
    		if (opjMapping.isLoginRequired()) {
    			HttpSession session = request.getSession();
    			//Si l'utilisateur n'est pas identifié, 
    			if (session.getAttribute("USER") == null) {
    				//Alors on prend la cible prévue en cas d'erreur
    				target = new String("error");			
    				ActionErrors errors = new ActionErrors();
    				errors.add(
    						ActionErrors.GLOBAL_ERROR, 
    						new ActionError("errors.login.required")
    				);
    				//Enregistrement des erreurs en session
    				if (!errors.isEmpty()) {
    					saveErrors(request, errors);
    				}
    			}
    		}
    		/*
    		 * Traitement douteux, si l'utilisateur a annulé ça n'est pas un succès
    		 * if (isCancelled(request)) { //Annulation. Retour à la liste des
    		 * mails return (mapping.findForward("succes")); }
    		 */
    		try {
    			System.out.println("initBoardAction");
    			//Construction de la pile d'erreurs
    			stackError = new OpjStackError();
    			//Construction de l'accès aux données
    			sqlServer = new SqlServer(stackError);
    			sqlServer.getDataSource(SqlServer.DATA_SOURCE);
    			//Récupération de la session et des attributs et paramètres
    			HttpSession session = request.getSession();
     
    			Garden garden = (Garden)session.getAttribute("GARDEN");
     
    			//construction du BoardForm
    			BoardForm eForm = (BoardForm)form;
     
    			//chargement des BoardSitLib
    			Vector<ObjectLib> allBoardSitLib = sqlServer.loadAllBoardSitLib();
    			session.setAttribute("ALL_BOARDSITLIB", allBoardSitLib);
     
     
     
    			String strBoardId = request.getParameter("boardId");
    			//si il s'agit d'une update de planche
    			if(strBoardId!=null) {
    				//récupération de l'objet planche à modifier
    				Board board = garden.getBoardByPk(Integer.parseInt(strBoardId));
    				session.setAttribute("BOARD", board);
     
    				//remplissage du BoardForm
    				eForm.setId(board.getId());
    				eForm.setBoardName(board.getBoardName());
    				eForm.setBoardW(board.getBoardW());
    				eForm.setBoardL(board.getBoardL());
    				eForm.setBoardEnable(board.getBoardEnable());
     
    				//completion des BoardSituations de l'objet Board
    				sqlServer.loadBoardSituations(board);
    				Vector<BoardSituations> bs = board.getBoardSituations();
    				//completion des b
    				completeBoardSitLib(allBoardSitLib, bs);
     
    			} else {
    				//alors il s'agit d'une création de planche
    				eForm.setBoardName("");
    				eForm.setBoardW(0);
    				eForm.setBoardL(0);
    				eForm.setBoardEnable("1");	
    				//bs = new Vector<BoardSituations>();
    			}
    			allBoardSitLib.get(3).setValue(1);
    			//System.out.println("allBoardSitLib : " + allBoardSitLib);
    			eForm.setBoardSitLibs(allBoardSitLib);
     
    		} catch (Exception e) {
    			//System.err.println("Setting target to error");
    			target = new String("error");
    			ActionErrors errors = new ActionErrors();
     
    			errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("errors.database.error", e.getMessage()));
     
    			// signalement des erreurs éventuelles
    			if (!errors.isEmpty()) {
    				saveErrors(request, errors);
    			}
    		}
    		finally {
    			sqlServer.logoff();
    		}
    		//System.out.println("target : " + target);
    		return (mapping.findForward(target));
    	}		
    }
    et mon BoardFormAdd.jsp

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    <%@ page language="java" %>
    <%@ page import="java.util.*"%>
    <%@ page import="fr.mnhn.opj.bo.*"%>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
    <%@ taglib uri="/WEB-INF/datetime.tld" prefix="dt" %>
    <jsp:useBean class="fr.mnhn.opj.bo.User" id="USER" scope="session" />
    <html>
    	<head>
    		<title><bean:message key="app.titre"/></title>
    		<link rel="icon" type="image/png" href="config/papillon_jaune.gif" />
    		<link rel='StyleSheet' type='text/css' href='config/default.css'/>
    		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
    </head>
    <body>
    	<%
    		System.out.println("boardFormAdd.jsp");
    		User user = (User) session.getAttribute("USER");
    		Garden garden = (Garden) session.getAttribute("GARDEN");
    		String gardenName = garden.getName();
    		String strBoardId = request.getParameter("boardId");
    		//System.out.println("strBoardId : " + strBoardId);
     
    		if (strBoardId!=null){
    			Board board = garden.getBoardByPk(Integer.parseInt(strBoardId));
     
    			session.setAttribute("BOARD", board);
    		}
     
     
     
     
    	%>
    	<!-- Entête -->
    	<jsp:include flush="true" page="composants/enTete.jsp">
    		<jsp:param name="entete" value="entete"/>
    	</jsp:include>		
    	<!-- Page -->
    	<div class="page">
    		<!-- Menu de navigation (partie gauche) -->
    		<jsp:include flush="true" page="composants/menuNavigation.jsp">
    			<jsp:param name="page" value="jardinFormUpdate.jsp"/>
    		</jsp:include> 
    		<!-- Zone d'affichage d'informations générales diverses (partie droite) -->
    		<jsp:include flush="true" page="composants/info.jsp">
    			<jsp:param name="info" value="info"/>
    		</jsp:include>
    		<!-- Partie centrale de la page (essentiel du contenu) -->
    		<div class="partieCentrale">
    			<!-- Affichage des erreurs de fonctionnement (erreurs non relatives à des actions de l'utilisateur et donc non localisables à un endroit précis du document) -->
    			<html:errors property="org.apache.struts.action.GLOBAL_ERROR" />
          		<h1><bean:message key="app.addBoard" /></h1>
          		<layout:space />
          		<layout:space />
          		<layout:space />
          		<h2 style="text-align: left"><jsp:getProperty name="USER" property="login" />, </h2>
    			<layout:space />
    			<h4> Jardin  "<%= gardenName %>" </h4>
    			<layout:space />
    			<layout:cell>Afin d'analyser au mieux les données, comprendre l'impact des jardins et de leur environnement sur les escargots, nous avons besoin de quelques informations. Dans cette page, vous êtes invité à définir les caractéristiques de votre planche. Vous aurez toujours la possibilité de modifier les informations que vous allez saisir pour cette planche, vous pouvez aussi choisir de ne plus vous en servir auquel cas vous devez la désactiver, mais vous ne pourrez pas la supprimer.</layout:cell>
    			<layout:space />
    			<layout:space />
    			<layout:form action="/AddBoard" key="app.votreplanche" editFocus="" name="boardForm" type="fr.mnhn.opj.struts.form.BoardForm" scope="request" styleClass="decorationTable">
    				<layout:row>
    					<layout:column width="30%">
    						<html:hidden property="id" />				
    						<!-- On utilise ici une table pour insérer le composant layout sans interférer avec le reste du balisage -->
    						<layout:space />
    						<layout:cell styleClass="decorationLayoutTitre"><bean:message key="app.boardName" /></layout:cell>
    		  			</layout:column>
    		  			<layout:column width="70%">						
    						<layout:space />
    						<layout:text key="" property="boardName" maxlength="25" isRequired="true"  type="text" styleClass="decorationLayout" />
    					</layout:column>
    				</layout:row>
     
    				<layout:row>
    					<layout:column width="30%">
    						<layout:space />
    						<layout:space />
    						<layout:cell styleClass="decorationLayoutTitre"><bean:message key="app.boardW" /></layout:cell>
    		  			</layout:column>
    		  			<layout:column width="70%">						
    						<layout:space />
    						<layout:text key="" property="boardW" maxlength="25" isRequired="true"  type="text" styleClass="decorationLayout" />
    					</layout:column>
    				</layout:row>
     
    				<layout:row>
    					<layout:column width="30%">
    						<layout:space />
    						<layout:space />
    						<layout:cell styleClass="decorationLayoutTitre"><bean:message key="app.boardL" /></layout:cell>
    		  			</layout:column>
    		  			<layout:column width="70%">						
    						<layout:space />
    						<layout:text key="" property="boardL" maxlength="25" isRequired="true"  type="text" styleClass="decorationLayout" />
    					</layout:column>
    				</layout:row>
     
     
    				<layout:row>
    					<layout:column>
    						<%-- Saisie des observations pour les espèces de papillons de la brochure --%>
    						<layout:cell styleClass="decorationBrochure">
    							<%-- Parcours de la collection d'espèces de papillons de la brochure --%>
    							<layout:collection property="boardSitLibs" id="boardSitLibs" indexId="index" align="left">
    							   <layout:collectionItem title="">
    							      <layout:checkbox property="boardSitLibs[${index}].value" value="1" layout="false"/>
    							   </layout:collectionItem>
    							   <layout:collectionItem property="label"/>
    							</layout:collection>
    						</layout:cell>
    					</layout:column>
    				</layout:row>
     
     
     
    				<layout:row>
    					<layout:column width="30%">
    						<layout:space />
    						<layout:space />
    						<layout:cell styleClass="decorationLayoutTitre"><bean:message key="app.boardEnable" /></layout:cell>
    		  			</layout:column>
    		  			<layout:column width="70%">						
    						<layout:space />
    						<layout:radios property="boardEnable" key="" styleClass="decorationLayout" isRequired="true" >
    							<layout:option key="desactivée" value="0" />
    							<layout:option key="activée" value="1" />
    						</layout:radios>
    					</layout:column>
    				</layout:row>
     
    				<layout:row>
    					<layout:column>
    						<layout:submit value="Valider"/>
    					</layout:column>
    				</layout:row>
    			</layout:form>
    		</div>
    		<!-- Pied de page -->
    		<jsp:include flush="true" page="composants/piedPage.jsp">
    			<jsp:param name="piedpage" value="piedpage"/>
    		</jsp:include>
    	</div>	  		
    </body>
    </html>
    merci pour toute ton aide,

    Olivier

  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
    Enlève le scope="request" dans le tag layout:form.
    Tu utilises Struts 1.1 ?

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    au poil !

    merci beaucoup !

    oui c'est la version 1.1 enfin c'est ce que j'ai lu tout au haut de mon fichier struts-config.xml

    pourquoi?

  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
    Tout simplement parce que dans les versions supérieures ou égales à la 1.2.4, on ne doit plus spécifier les attributs name, type et scope dans le tag form car il les récupère dans le mapping de l'Action dans le struts-config.xml.

    Pour vérifier la version de Struts utilisée, il faut regarder dans le fichier MANIFEST.MF (dans Specification-Version) présent dans le répertoire META-INF du jar de Struts.

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    ok merci pour l'info, j'ai bien la version 1.1 de struts...

    je crois que je suis paré pour la suite, merci beaucoup pour tes réponses

    Olivier

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/06/2010, 17h39
  2. [Struts-Layout] Collection avec des checkbox
    Par valkeke dans le forum Struts 1
    Réponses: 6
    Dernier message: 12/12/2009, 12h20
  3. Réponses: 5
    Dernier message: 21/11/2008, 16h46
  4. [Struts-Layout] collection et checkbox
    Par khayri dans le forum Struts 1
    Réponses: 14
    Dernier message: 03/05/2007, 12h19
  5. [Struts-Layout] layout:collection et checkbox
    Par Mayhem dans le forum Struts 1
    Réponses: 10
    Dernier message: 01/11/2006, 00h59

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