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 :

Possible de faire html:options sur une liste de String ? [FAQ]


Sujet :

Struts 1 Java

  1. #1
    SrK
    SrK est déconnecté
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 213
    Par défaut Possible de faire html:options sur une liste de String ?
    Bonjour,

    Je souhaiterais parcourir une collection pour remplir les options d'un select.

    Cependant, j'ai rempli ma liste de String, et donc ce ne sont pas des objets, et il me met "Cannot find bean under name..."
    Est ce que c'est possible de le faire avec une liste de String avec html:optionsCollection ??

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Par défaut
    T'as bien regardé dans la FAQ ou les tutoriels?
    Quoi qu'il en soit, tu parles d'une liste de String ou d'un tableau de String? A priori, dans les deux cas, ça doit fonctionner... Essaye plutot de savoir si ta liste est bien présente là où tu tentes de l'utiliser (histoire de scope... etc).
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 64
    Par défaut
    Bonsoir,

    est ce que tu peus nous donner un peut de code .
    mais est ce que tu as pensé a utilisé les tag JSTL ?

    Cordialement, abdess6600

  4. #4
    SrK
    SrK est déconnecté
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 213
    Par défaut
    Non, je n'ai encore jamais utilisé les tag JSTL, mais d'habitude j'utilise des collections d'objet et je n'ai pas de problèmes.

    Voici le code qui permet de faire la liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    		ResultSet rs = GetResultSetforRequest("SELECT fieldtypename from FIELDTYPE where validate='true' ORDER BY fieldtypename");
     
    		ArrayList fieldtypes = new ArrayList();
     
    		rs.beforeFirst();
    		String fieldtype = null;
    		while (rs.next())
    		{ 
    			 fieldtype = rs.getString("FieldTypeName");
    		     fieldtypes.add(fieldtype);
    	    }
    		    rs.close();
     
    		return fieldtypes;
    Peut être est ce que je peux directement bouclé sur le resultSet avec le html:options ???

    Et voici le code dans le jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    			<% ArrayList fieldtypes = new ArrayList();
    			fieldtypes = db.getFieldTypesNames();
    			 %>
    			<html:select property="FIELD_TYPE" styleClass="select" >
    				<html:options collection="fieldtypes" property="TYPECHAMP" labelProperty="TYPECHAMP"  /><%-- TCHP_NAME --%>
    			</html:select>
    C'est dans le property et labelproperty que je ne sais quoi mettre en fait, vu que c'est des string

  5. #5
    Membre confirmé Avatar de stela86
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Par défaut
    Le code qui te permet de remplir ta liste il se trouve dans une Action ou dans une ActionForm ?

  6. #6
    Membre Expert
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Par défaut
    N'utilise pas le resultSet dans la JSP, ce n'est pas propre du tout. Si on sépare l'architecture en plusieurs couche, ce n'est pas pour retrouver des elements de connexion dans la couche de présentation ! Si la JSP plante, c'est la merde au niveau des transactions.
    Sinon, tu pourrais nous envoyer le code qui met ta liste en session ou en request stp. De plus, est ce que les noms et id que tu utilises dans ton tag options sont vraiment ceux que tu utilises ou est ce que tu les as modifié pour nous ?

  7. #7
    SrK
    SrK est déconnecté
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 213
    Par défaut
    ok c'est bien ce que je fais, à terme tout cela sera mis en session dans l'action, mais je voulais testé avant de le faire.

    Donc avec mon ArrayList ca marche ?

    Je n'ai rien modifier du code.

    Je vais mettre vite fait la mise en session de la liste dans l'action, je comptais le faire si ca marchais, mais hop je me dépeche

  8. #8
    SrK
    SrK est déconnecté
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 213
    Par défaut
    Dans l'action, mise en session de la liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ArrayList fieldtypes = new ArrayList();
    	Connexion con = new Connexion();
    	fieldtypes = con.getFieldTypesNames();
            session.setAttribute("FieldTypes",fieldtypes);
    Dans la classe connexion:
    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 ArrayList getFieldTypesNames() throws SQLException {
     
     
    		ResultSet rs = GetResultSetforRequest("SELECT fieldtypename from FIELDTYPE where validate='true' ORDER BY fieldtypename");
     
    		ArrayList fieldtypes = new ArrayList();
     
    		rs.beforeFirst();
    		String fieldtype = null;
    		while (rs.next())
    		{ 
    			 fieldtype = rs.getString("FieldTypeName");
    		     fieldtypes.add(fieldtype);
    	    }
    		    rs.close();
     
    		return fieldtypes;
    	}
    Et enfin, dans la JSP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <jsp:useBean  id="fieldtypes" beanName="fieldtypes" type="java.util.ArrayList" scope="session" />
     
    			<html:select property="FIELD_TYPE" styleClass="select" onchange="FIELD_NAME.value=this.value+nbfield">
    				<html:options collection="fieldtypes" property="FieldTypeName" labelProperty="FieldTypeName"  /><%-- TCHP_NAME --%>
    			</html:select>
    Rq: j'ai essayé de faire un <jsp:useBean à la place de:<%
    session.getAttribute...
    pageContext.setAttribute..."
    %>

  9. #9
    Membre Expert
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Par défaut
    ce qui est troublant, c'est que dans ton option, tu défini les champs d'objet concerné or que, si ton objet est un string, il n'y a pas de champs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:options collection="fieldtypes" property="FieldTypeName" labelProperty="FieldTypeName"  />
    Qu'est ce que FieldTypeName ?
    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:select property="id">
    	<html:options collection="liste" property="id" labelProperty="lib"/>
    </html:select>
    Ici, ma liste est une liste d'objets de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class TypeObjet {
      private int id;
      private String lib;
     
      public TypeObjet(int id,String lib) {
        this.id=id;
        this.lib=lib;
     }
     ...
     //getters et setters
    }
    Comme tu le vois, le property et le label du tag option pointe vers des champs de l'objet.

  10. #10
    SrK
    SrK est déconnecté
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 213
    Par défaut
    bah oui, c'est la ou je suis troublé, vu que ce ne sont pas des objets, je ne sais pas trpo quoi mettre, donc en fait ca ne correspond pas a grand chose, a part le nom de la colonne sur la BD

  11. #11
    SrK
    SrK est déconnecté
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 213
    Par défaut
    d'ailleurs il y a une faut dans la définition de mon useBean:
    <jsp:useBean id="fieldtypes" beanName="fieldtypes" type="java.util.ArrayList" scope="session" />

    Je met comme type ArrayList alors que c'est des strings, je dois mettre type="java.lang" non ?

  12. #12
    SrK
    SrK est déconnecté
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 213
    Par défaut
    non java.lang ca pose d'énormes soucis

    Bref, je vais expliqué comment je vois la démarche, et n'hésitez pas a me dire la ou je n'ai pas compris le truc ^^

    BUT: remplir une liste a partir d'éléments de la BD.

    1. Placer en session la liste nécessaire au html:options durant l'action.
    Pour ce faire, j'ai choisi un ArrayList de String.

    2. Dans le JSP, récupérer la liste et définir un bean afin de pouvoir la parcourir.
    Etant donné que le html:options a besoin de savoir ce qu'il va énuméré, je défini le type String (dans java.lang ??)

    3. Faire le html:select et html:options, parcourant la collection et préciser sur quel champ faire l'énumération. La un problème que je ne sais résoudre, il n'y a pas de champ dans ma liste :'( donc je met rien pour property ?


    Erreur actuelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    javax.servlet.ServletException: fieldtypes
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
    Donc problème a la définition du useBean ?

  13. #13
    Membre Expert
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:select property="fieldtypes" onchange="FIELD_NAME.value=this.value+nbfield">
    	<html:options name="fieldtypes" labelName="fieldtypes"  />
    </html:select>
    Essaie ca.
    NB : pour le onChange, je sais pas ce qu'il faut mettre... je comprend pas trop ce qu'il doit faire, donc

  14. #14
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Par défaut
    Tu n'as pas à mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <jsp:useBean id="fieldtypes" beanName="fieldtypes" type="java.util.ArrayList" scope="session" />
    Le html:options se débrouille de le récupérer où il se trouve et de le gérer comme il faut puisque c'est un ArrayList et qu'il sait quoi en faire.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  15. #15
    SrK
    SrK est déconnecté
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 213
    Par défaut
    Voila j'ai supprimé je jsp:useBean et mis de la facon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    			<html:select property="fieldtypes" styleClass="select" onchange="FIELD_NAME.value=this.value+nbfield">
    				<html:options name="fieldtypes" labelName="fieldtypes"  /><%-- TCHP_NAME --%>
    			</html:select>
    Voila l'erreur rencontré, j'ai rajouté des getter/setter pour fieldtypes, dans le value du formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    javax.servlet.jsp.JspException: No getter method available for property fieldtypes for bean under name org.apache.struts.taglib.html.BEAN
    	org.apache.struts.taglib.html.SelectTag.calculateMatchValues(SelectTag.java:285)
    	org.apache.struts.taglib.html.SelectTag.doStartTag(SelectTag.java:202)

  16. #16
    Membre Expert
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Par défaut
    Il ne faut pas enlever le useBean

  17. #17
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Par défaut
    Hum hum...

    bon remplace le code par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <html:select property="fieldTypeId" styleClass="select" onchange="FIELD_NAME.value=this.value+nbfield">
    <div style="margin-left:40px"><html:optionsCollection name="fieldtypes"  /></div></html:select>
    Et ça devrait fonctionner...
    Par contre j'ai mis fieldTypeId qui est le nom de la propriété du formulaire qui va recevoir le choix de l'utilisateur, donc à adapter.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  18. #18
    SrK
    SrK est déconnecté
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 213
    Par défaut
    J'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <bean:define id="fieldtypes" name="fieldtypes" type="java.lang.String" scope="session" />
    			<html:select property="FIELD_TYPE" styleClass="select" onchange="FIELD_NAME.value=this.value+nbfield">
    				    <html:optionsCollection name="fieldtypes" />
    			</html:select>
    Et ca a donné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    java.lang.ClassCastException: java.util.ArrayList
    	org.apache.jsp.view.formalism.Field_005fcreate_005fv2_jsp._jspService(Field_005fcreate_005fv2_jsp.java:160)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)

  19. #19
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Par défaut
    Et sans le bean:define ça donne quoi ??
    Et arrête de prendre ton ArrayList pour un String ! Les String c'est le contenu, pas le contenant.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  20. #20
    SrK
    SrK est déconnecté
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 213
    Par défaut
    ok pour le mélange string arraylist ^^

    Sinon ca donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    javax.servlet.jsp.JspException: No getter method available for property label for bean under name Code
    org.apache.struts.taglib.html.OptionsCollectionTag.doStartTag(OptionsCollectionTag.java:214)
    org.apache.jsp.view.formalism.Field_005fcreate_005fv2_jsp._jspx_meth_html_optionsCollection_0(Field_005fcreate_005fv2_jsp.java:351)
    Je ne comprend pas ce qu'est Code ??

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/03/2009, 11h07
  2. [HTML] bug sur une liste déroulante
    Par GreatDeveloperOnizuka dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 30/01/2008, 11h58
  3. Réponses: 4
    Dernier message: 24/10/2007, 14h57
  4. Est il possible de faire un cursor sur une procédure stocké ?
    Par berceker united dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/09/2007, 16h47
  5. Selectionnet tous ou faire un clear sur une liste
    Par Canou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/11/2004, 10h26

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