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 :

Utilisation bean:define ?


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 Utilisation bean:define ?
    Bonjour,

    Ca fait déjà plein de fois que je l'utilise et pourtant j'ai toujours les meme problèmes, il y a quelque chose que je ne dois pas avoir bien compris, donc arretez moi la ou je fais erreur^^.

    voila le truc, dans mon action j'ai placé en session une liste d'objets. (je met null en session, si j'ai pas d'objet a mettre dedans, est ce la le problème ?)

    Dans ma JSP, je dois la récupéré afin de pouvoir remplir un select avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:options collection="liste" property="NAME" labelProperty="NAME" />
    Pour la récupérer, il existe différente solutions: bean:define, et jsp:usebean voir une méthode un peu moins propre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <% ArrayList liste = session.getAttribute("liste"); pageContext.setAttribute("liste",liste);%>
    Et donc il dans mon cas je voudrais utiliser le bean:define.

    Voila comment je pensais le faire:
    <bean:define id="liste" name="liste" property="NAME"/>


    erreur a la compil:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.ServletException: Cannot find bean champs_of_item_in_definition in any scope
    Merci de votre aide

  2. #2
    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
    Si tu as codé ceci dans ton Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session.setAttribute("liste",liste) ;
    tu peux accèder à ton ArrayList simplement via ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:options collection="liste" property="name" labelProperty="name" />
    Ceci suppose que liste est une ArrayList de beans ayant une propriété name.

    Est-ce bien le cas ?

  3. #3
    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
    oui

  4. #4
    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
    Donc, tu n'as pas à faire un bean:define ou quoi que ce soit d'autre.

    As-tu un message d'erreur ?

  5. #5
    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
    Avec le debugueur je vois bien que la liste est placée en session, enfin dans mon cas, "null".

    Le message d'erreur vient à l'execution de la page jsp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    javax.servlet.jsp.JspException: Cannot find bean under name champs_of_item_in_definition
    	org.apache.struts.taglib.html.OptionsTag.getIterator(OptionsTag.java:368)
    	org.apache.struts.taglib.html.OptionsTag.doEndTag(OptionsTag.java:188)

  6. #6
    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
    Je suppose que champs_of_item_in_definition est la propriété codée dans le tag html:select non ?
    Si c'est le cas, as-tu bien défini cette propriété dans l'ActionForm avec getter et setter ?
    Et as-tu bien mis ton tag html:select dans un tag html:form ?
    L'ActionForm en question est-il bien défini dans le mapping de ton Action dans le struts-config.xml ?

    Enfin, as-tu fait un test avec une ArrayList non null ?

  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
    La propriété codée dans le tag html:select porte un autre nom, et elle possede ses getter et setter.

    html:select est bien dans un html:form.

    L'ActionForm en question est-il bien défini dans le mapping de ton Action dans le struts-config.xml ? oui

    Enfin, as-tu fait un test avec une ArrayList non null ? non je vais tester ca

  8. #8
    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
    Mais tu as bien défini quelque part une propriété qui s'appelle champs_of_item_in_definition non ?

  9. #9
    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
    c'est juste le nom de la liste que je met en session

  10. #10
    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
    Tu as donc codé ceci dans le tag html:options :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:options collection="champs_of_item_in_definition" property="name" labelProperty="name" />
    Peux-tu me montrer le code de ta jsp avec le html:form et le html:select et le code de l'Action qui met en session l'ArrayList ?

    Pour info, il vaudrait mieux respecter les conventions de nommage java, surtout quand tu utilises Struts.
    Ne pourrais-tu pas donner un nom plus simple à ton ArrayList, avec une majuscule à chaque nouveau mot sauf le premier et sans _ ?

  11. #11
    zev
    zev est déconnecté
    Membre expérimenté
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Par défaut
    sinon pour tester si c null avant d'essayer d'utiliser le bean, il y a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <logic:notEmpty name="toto">
       <bean:define name="toto" id="toto" />
    </logic:notEmpty>
    http://struts.apache.org/struts-doc-...uts-logic.html

  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
    pour les _ j'y penserais pour la prochaine fois mais la je vais éviter il y en a partout ^^

    Mise en session:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Rubrique rubrique = (Rubrique)session.getAttribute("item_in_definition");
    if (rubrique==null)
    session.setAttribute("field_of_item_in_definition",null);	
    else
    session.setAttribute("field_of_item_in_definition",rubrique.champs);

    Code dans la JSP (je met pas tout car c'est tres long, donc juste le passage concerné)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <html:select property="EXISTING_FIELD_NAME" size="5" styleClass="select">
    		<logic:present parameter="validfield">		
    <html:options collection="field_of_item_in_definition" property="NOM" />
    		</logic:present>	
    </html:select>

  13. #13
    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
    C'est à cause du null.

    Il faut absolument que field_of_item_in_definition soit une collection.

    Il suffit donc de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Rubrique rubrique = (Rubrique)session.getAttribute("item_in_definition");
    if (rubrique==null)
    session.setAttribute("field_of_item_in_definition",new ArrayList());	
    else
    session.setAttribute("field_of_item_in_definition",rubrique.champs);

  14. #14
    zev
    zev est déconnecté
    Membre expérimenté
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Par défaut
    Oui , ou ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <logic:notEmpty name="field_of_item_in_definition">
      <html:select property="EXISTING_FIELD_NAME" size="5" styleClass="select">
        <logic:present parameter="validfield">
          <html:options collection="field_of_item_in_definition" property="NOM" />
        </logic:present>	
      </html:select>
    <logic:notEmpty />
     
    // Et pour faire mieux
    <logic:empty name=""field_of_item_in_definition">
      Aucun choix possible
    <logic:empty />

  15. #15
    zev
    zev est déconnecté
    Membre expérimenté
    Inscrit en
    Octobre 2004
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 204
    Par défaut
    notEmpty
    Evaluate the nested body content of this tag if the requested variable is neither null, nor an empty string, nor an empty java.util.Collection (tested by the .isEmpty() method on the java.util.Collection interface).

  16. #16
    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
    Citation Envoyé par SrK
    (je met null en session, si j'ai pas d'objet a mettre dedans, est ce la le problème ?)
    J'en étais sur que c'étais pas tres catholique xD

    Bah merci, effectivement il ne me génere plus d'erreur

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

Discussions similaires

  1. <bean:define> pour utiliser <bean:size>
    Par jadey dans le forum Struts 1
    Réponses: 2
    Dernier message: 31/10/2011, 15h58
  2. Réponses: 4
    Dernier message: 15/02/2006, 17h24
  3. [Struts] paramètre JS dans un bean:define
    Par Mrlud dans le forum Struts 1
    Réponses: 4
    Dernier message: 09/06/2005, 14h38
  4. Réponses: 4
    Dernier message: 19/04/2005, 13h42
  5. [Struts]pb de Bean define
    Par tscoops dans le forum Struts 1
    Réponses: 8
    Dernier message: 02/03/2005, 09h12

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