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

FAQ StrutsConsultez toutes les FAQ

Nombre d'auteurs : 25, nombre de questions : 96, dernière mise à jour : 23 février 2015  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.

SommaireFormulairesListe et Map (6)
précédent sommaire suivant
 

Un tag html:select doit être dans un tag html:form afin de pouvoir récupérer le ou les éléments sélectionnés dans la liste déroulante.
Struts utilisant par défaut le form-bean référencé dans le mapping de l'Action via l'attribut name, il n'est pas utile de coder l'attribut name="nomDuFormBean" dans le tag html:select.

Dans l'attribut property du tag html:select, il faut spécifier le nom de la propriété qui contiendra la ou les valeurs sélectionnées.

Code JSP : Sélectionner tout
<html:select property="selectedItem">

La propriété selectedItem doit être définie dans l'ActionForm avec getter et setter et doit être de type String.

Code JSP : Sélectionner tout
<html:select property="selectedItems" multiple="true">

La propriété selectedItems doit être définie dans l'ActionForm avec getter et setter et doit être de type String[].

Pour afficher les options de la liste déroulante, il y a plusieurs possibilités.

1) Dans le cas où la collection a été mise dans le scope via un setAttribute, elle doit être référencée dans le tag html:options ou html:optionsCollection via l'attribut name.

S'il s'agit d'un tableau de String ou d'Integer, d'une collection de String ou d'Integer, il suffit de coder ceci :

Code JSP : Sélectionner tout
1
2
3
<html:select property="selectedItem"> 
   <html:options name="uneCollection"/> 
</html:select>

S'il s'agit d'une collection d'objets ayant pour propriétés id et libelle :

Code JSP : Sélectionner tout
1
2
3
<html:select property="selectedItem"> 
  <html:options collection="uneCollection" property="id" labelProperty="libelle"/> 
</html:select>

ou

Code JSP : Sélectionner tout
1
2
3
<html:select property="selectedItem"> 
  <html:optionsCollection name="uneCollection" value="id" label="libelle"/> 
</html:select>

La propriété id spécifiée dans l'attribut property correspond à la valeur renvoyée si celle-ci est sélectionnée et la propriété libelle spécifiée dans l'attribut labelProperty est le label qui s'affiche dans la liste déroulante.

2) Dans le cas où la collection est une propriété de l'ActionForm et que celle-ci est initialisée via le setter de l'ActionForm dans une Action qui s'exécute avant l'affichage du formulaire, elle doit être référencée dans le tag html:options ou html:optionsCollection via l'attribut property.

S'il s'agit d'un tableau de String ou d'Integer, d'une collection de String ou d'Integer, il suffit de coder ceci :

Code JSP : Sélectionner tout
1
2
3
<html:select property="selectedItem"> 
   <html:options property="uneCollection"/> 
</html:select>

S'il s'agit d'une collection d'objets ayant pour propriétés id et libelle :

Code JSP : Sélectionner tout
1
2
3
<html:select property="selectedItem"> 
  <html:optionsCollection property="uneCollection" value="id" label="libelle"/> 
</html:select>

S'il s'agit d'une collection de LabelValueBean , celui-ci ayant pour propriété value et label, il n'est pas utile de coder les attributs value et label dans le tag html:optionsCollection :

Code JSP : Sélectionner tout
1
2
3
<html:select property="selectedItem"> 
  <html:optionsCollection property="uneCollection"/> 
</html:select>

Si on veut sélectionner par défaut un élément de la liste déroulante, il suffit d'initialiser la propriété correspondante de l'ActionForm dans l'Action qui s'exécute avant l'affichage du formulaire via le code suivant :

Code java : Sélectionner tout
1
2
UneActionForm uneActionForm = (UneActionForm) form; 
uneActionForm.setSelectedItem(variableContenantLaValeurParDefaut);

Ceci implique que le form-bean soit référencé via l'attribut name dans le mapping de cette Action dans le struts-config.xml.

Dans le cas où la valeur par défaut est fixe, il est possible d'initialiser la propriété selectedItem dans la méthode reset() dans le cas d'une ActionForm, ou dans l'attribut initial de la balise form-property dans le cas d'une DynaActionForm.

Mis à jour le 4 juin 2008 c_nvy

Les DropDownBox sont utilisées par exemple quand on choisit une valeur dans une première liste, on souhaite restreindre les valeurs possibles dans une seconde liste.

Code JSP : Sélectionner tout
1
2
3
4
5
6
7
8
<html:form name= "myform"> 
    <html:select property="list1" onchange="document.myform.submit()"> 
    ... 
    </html:select> 
    <html:select property="list2"> 
    ... 
    </html:select> 
</html:form>

Lors d'un changement, un premier submit est déclenché par l'événement "onchange" de la liste list1.
Lors de cette soumission, il faut dans l'Action ou dans l'ActionForm définir les valeurs possibles retournées pour la liste list2.
Ainsi, celles-ci seront affichées lors du réaffichage du formulaire.

Mis à jour le 13 mai 2004 RanDomX

Il suffit de positionner l'attribut value du tag select à la valeur souhaitée.
Ex :

Code JSP : Sélectionner tout
1
2
3
4
<html:select name="myForm" property="sex" value="M"/> 
    <html:option value="M">M</html:option> 
    <html:option value="F">F</html:option> 
</html:select>

Une variante avec association directement de la valeur au formulaire (cas d'un scénario d'édition) consiste à définir la valeur de la sélection dans l'action préparant l'affichage de la page :

Code Java : Sélectionner tout
1
2
3
4
5
6
7
8
9
public ActionForward execute(ActionMapping mapping, ActionForm form,  
		HttpServletRequest request, HttpServletResponse response) throws Exception { 
  
	MonForm monForm = (MonForm) form; 
	 ... 
	String valeurSelectionnee = ... 
	monForm.setValeurSelection(valeurSelectionnee); 
	... 
}

Le code suivant de la vue affichera ainsi la sélection correspondante :

Code JSP : Sélectionner tout
1
2
3
<html:select property="valeurSelection"> 
   <html:optionsCollection property="listeValeur" label="label" value="value" /> 
</html:select>

Mis à jour le 13 mai 2004 mezoo RanDomX

Chaque itération d'une Map étant un objet de type Map.Entry qui a pour propriétés key et value, il suffit de coder ceci :

Code JSP : Sélectionner tout
1
2
3
4
<logic:iterate name="mapForm" property="map" id="mapEntry"> 
	<bean:write name="mapEntry" property="key"/> 
	<bean:write name="mapEntry" property="value"/> 
</logic:iterate>

Mis à jour le 2 décembre 2014 c_nvy Robin56

Dans la jsp :

Code JSP : Sélectionner tout
1
2
3
4
<logic:iterate name="mapForm" property="map" id="mapEntry"> 
	<bean:write name="mapEntry" property="key"/> 
	<html:text name="mapForm" property="mapValue(${mapEntry.key})"/>		 
</logic:iterate>

Dans l'ActionForm :
Code Java : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class MapForm extends ActionForm 
{ 
	Map map = new LinkedHashMap() ; 
  
	public Map getMap() 
	{ 
		return this.map; 
	} 
	public void setMap(Map map) 
	{ 
		this.map = map; 
	} 
	public Object getMapValue(String key) 
	{ 
	    return this.map.get(key); 
	} 
	public void setMapValue(String key,Object value) 
	{ 
	    this.map.put(key,value) ; 
	} 
}

Mis à jour le 2 décembre 2014 Robin56

Ce tag permet de lier deux listes déroulantes entre elles. La première restreignant ainsi l'affichage des propositions dans la seconde liste.

Prenons l'exemple suivant : la liste double sera composée d'une liste d'objets Element. Chaque objet Element contient une liste d'objets SousElement.

Voici le code de la classe Element et SousElement :

Code Java : Sélectionner tout
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
public class Element { 
  
	private String valeurElement; 
	private String libelleElement; 
	private ArrayList<SousElement> sousElement; 
  
	public String getValeurElement() { 
		return valeurElement; 
	} 
	public void setValeurElement(String valeurElement) { 
		this.valeurElement = valeurElement; 
	} 
	public String getLibelleElement() { 
		return libelleElement; 
	} 
	public void setLibelleElement(String libelleElement) { 
		this.libelleElement = libelleElement; 
	} 
	public ArrayList<SousElement> getSousElement() { 
		return sousElement; 
	} 
	public void setSousElement(ArrayList<SousElement> sousElement) { 
		this.sousElement = sousElement; 
	} 
} 
  
public class SousElement { 
  
	private String valeurSousElement; 
	private String libelleSousElement; 
  
	public String getValeurSousElement() { 
		return valeurSousElement; 
	} 
	public void setValeurSousElement(String valeurSousElement) { 
		this.valeurSousElement = valeurSousElement; 
	} 
	public String getLibelleSousElement() { 
		return libelleSousElement; 
	} 
	public void setLibelleSousElement(String libelleSousElement) { 
		this.libelleSousElement = libelleSousElement; 
	} 
}

Les listes sont initialisées ici :
Code Java : Sélectionner tout
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
listeElements = new ArrayList<Element>(); 
ArrayList<SousElement> listeSsElements1 = new ArrayList<SousElement>(); 
ArrayList<SousElement> listeSsElements2 = new ArrayList<SousElement>(); 
Element elem1 = new Element(); 
Element elem2 = new Element(); 
SousElement sousElem1 = new SousElement(); 
SousElement sousElem2 = new SousElement(); 
SousElement sousElem3 = new SousElement(); 
  
elem1.setValeurElement("element1"); 
elem1.setLibelleElement("libElement1"); 
elem2.setValeurElement("element2"); 
elem2.setLibelleElement("libElement2"); 
  
sousElem1.setLibelleSousElement("libElement1"); 
sousElem1.setValeurSousElement("sousElement1"); 
sousElem2.setLibelleSousElement("libElement2"); 
sousElem2.setValeurSousElement("sousElement2"); 
sousElem3.setLibelleSousElement("libElement3"); 
sousElem3.setValeurSousElement("sousElement3"); 
  
listeSsElements1.add(sousElem1); 
listeSsElements1.add(sousElem2); 
listeSsElements2.add(sousElem3); 
  
elem1.setSousElement(listeSsElements1); 
elem2.setSousElement(listeSsElements2); 
  
listeElements.add(elem1); 
listeElements.add(elem2);

La classe contenant la première liste d'objets Element doit possède le getter pour accéder à cette liste :
Code Java : Sélectionner tout
1
2
3
4
5
private ArrayList<Element> listeElements; 
  
public ArrayList<Element> getListeElements() { 
	return listeElements; 
}

Et le tag dans le JSP :
Code JSP : Sélectionner tout
1
2
3
4
5
<s:doubleselect 
	name="nom_element"		doubleName="nom_sous_element" 
	list="listeElements"		doubleList="sousElement"  
	listKey="libelleElement"	doubleListKey="libelleSousElement" 
	listValue="valeurElement"	doubleListValue="valeurSousElement"/>

Mis à jour le 23 février 2015 Fred532 fxjtarga Robin56

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2022 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.