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 :

[html:select] Génération d'une liste déroulante


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 23
    Par défaut [html:select] Génération d'une liste déroulante
    Bonjour a tous.


    Voila j'ai un petit probleme pour générer une liste de choix composée d'élements provenant d'une base de données. (je suis débutant en Struts... )

    Voila mon bean :
    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
     
    public class Drink {
     
    	String drinkName;
    	String drinkDescription;
    	int drinkPrice;
     
    	public Drink(){
    	}
     
    	public String getDrinkDescription() {
    		return drinkDescription;
    	}
     
    	public void setDrinkDescription(String drinkDescription) {
    		this.drinkDescription = drinkDescription;
    	}
     
    	public String getDrinkName() {
    		return drinkName;
    	}
     
    	public void setDrinkName(String drinkName) {
    		this.drinkName = drinkName;
    	}
     
    	public int getDrinkPrice() {
    		return drinkPrice;
    	}
     
    	public void setDrinkPrice(int drinkPrice) {
    		this.drinkPrice = drinkPrice;
    	}
    }
    Ma classe 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
     
    public class DeleteDrinkAction extends Action {
     
    	public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response) throws Exception {
     
                    Drinksdao dao = new Drinksdao();
     
    		Collection<Drink> Drinkslist = dao.ListDrink();
    		dao.closeDB();
                    request.setAttribute("liste", Drinkslist);
     
    		return mapping.findForward("deletelist");
    	}
    }
    Mon dao :
    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
     
    ...
           public Collection<Drink> ListDrink(){
     
    		req = "SELECT name FROM drinks ORDER BY name";
    		Read(req);
     
    		Drink d;
    		Collection<Drink> drinks = new Vector<Drink>();
     
    		try {
    			while(results.next()){
    				d = new Drink();
    				d.setDrinkName(results.getString("name"));
    				drinks.add(d);
     
    				return drinks;
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
     
    		return null;
    	}
    ...
    Et enfin pour finir mon code jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <html:select name="liste" property="drinkName">
    	<html:optionsCollection property="liste" name="drinkName"/>
    </html:select>
    L'erreur qui m'est annoncé est qu'il ne trouve pas de getter pour drinkName.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.ServletException: No getter method available for property drinkName for bean under name liste
    Je précise que je n'ai pas utilisé de balise form pour le moment ni de classe ActionForm (ca viendra). Mon but est pour l'instant d'afficher simplement la liste de ce qui est contenu dans ma base sous la forme d'un menu select.

    Je suis sous Java 5 avec Struts 1.2.

    Si qqun à une idée je suis preneur

    Merci d'avance
    Bonne journée

  2. #2
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    Je vais peut etre dire une connerie mais je crois qu il faut que ta classe Drink herite de ActionForm.

    Qu as tiu mis dans ton struts-config.xml ?

  3. #3
    Expert confirmé

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Essaie plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:select property="drinkName">
       <html:options collection="liste" property="drinkName" labelProperty="drinkName"/>
    </html:select>

  4. #4
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 23
    Par défaut
    Alors si j'essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <html:select property="drinkName">
       <html:options collection="liste" property="drinkName" labelProperty="drinkName"/>
    </html:select>
    J'obtient l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cannot find bean under name org.apache.struts.taglib.html.BEAN
    Voila mon fichier struts-config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <struts-config>
    	<action-mappings>
    		<action path="/DeleteDrinkAction" scope="request"  type="projet.actions.DeleteDrinkAction">
    			<forward name="deletelist" path="del_drink"></forward>
    		</action>
            </action-mappings>
    </struts-config>
    Je precise que j'utilise les tiles, je n'ai pas déclaré de form-beans dans le fichier de config, je pense que je n'en ai pas besoin vu que ma jsp n'est pas un form (enfin je débute je peux me tromper)...

  5. #5
    Expert confirmé

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Le message d'erreur que tu obtiens est normal car il ne trouve pas de bean drinkName (celui référencé dans le tag html:select et non celui référencé dans le tag html:options).

    Pour que cela fonctionne, il faut créer une ActionForm, avec getter et setter sur la propriété drinkName, déclarer le form-bean et ajouter la référence au form-bean dans le mapping de l'Action via l'attribut name dans le struts-config.xml, et enfin mettre le tag html:select dans un tag html:form.

    Petite précision : il faut obligatoirement passer par un formulaire pour pouvoir récupérer le drinkName sélecté.

  6. #6
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 23
    Par défaut
    Ok merci bcp j'ignorais le fait qu'il falait absolument passer par un formulaire.

    Par contre je ne sais pas trop comment créer ma classe ActionForm avec un getter et un setter car je travaille sur une collection, de plus dois-je faire un appel de cette classe ActionForm depuis ma Form ?

    J'imagine aussi que dans le fichier struts-config je dois mettre le paramètre validate à falise.

    Merci bcp d'avance car je pense que je touche au but

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Quand tu ecris <html:select name="liste" property="drinkName">, tu cherches dans la variable 'liste' une propriété 'drinkName' (mais liste est une collection).

    Dans ton cas, tu veux que le select soit rattaché à drinkName (dans l'actionForm) pour la valeur sélectionnée, donc il faudrait <html:select property="drinkName">

    Après tu précises d'où tu tires tes données pour l'itération dans <html:options... />, et ce que tu as mis est OK...

    J'espère que c'est assez clair...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [AC-2010] Ajouter selection [Tous] dans une liste déroulante
    Par mcharmat dans le forum IHM
    Réponses: 2
    Dernier message: 23/11/2013, 19h11
  2. [MySQL] Génération d'une liste déroulante
    Par MYST42 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 11/05/2009, 18h19
  3. [PEAR][HTML_QuickForm] Génération d'une liste déroulante
    Par Garra dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 21/08/2008, 22h01
  4. Réponses: 1
    Dernier message: 29/04/2008, 14h36
  5. [Tableaux] select à partir d'une liste déroulante
    Par baignassou dans le forum Langage
    Réponses: 4
    Dernier message: 26/03/2008, 17h23

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