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 :

Problème tiles & nested:iterate


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut Problème tiles & nested:iterate
    Bonjour,

    je suis en train de coder des formulaires avec pas mal de 'types de champs' communs. Du coup, je désire m'aider de struts-tiles pour factoriser au maximum les vues.

    Toutes mes tiles sont insérées dans la page 'principale' du formulaire comme ceci (MaForm.jsp):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <html:form action="/edition/testForm"> 
     
        <!-- Premier exemple simple qui marche -->
        <tiles:insert page="SimpleFieldTile.jsp" >
            <tiles:put name="beanName" value="operatorName" />
        </tiles:insert>
     
        <!-- Deuxième exemple scalaire qui ne marche pas -->
        <tiles:insert page="ScalarField.jsp" >
            <tiles:put name="beanName" value="emailsBean" />
        </tiles:insert>
    </html:form>

    Le premier exemple d'appel de la première tile (SimpleFieldTile.jsp) fonctionne parfaitement: elle utilise le String 'operatorName' défini dans ma classe dérivée d'ActionForm. J'obtiens bien ce que je veux, à savoir le champ rempli avec le contenu de de mon ActionForm.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <tiles:useAttribute id="beanName" name="beanName" classname="java.lang.String" />
     
    <div class="fieldWidget">
    	<html:text property="${beanName}" size="70"/>
    </div>
    Le second exemple par contre ne marche pas: ScalarField.jsp
    Il fait appel à une seconde tile qui doit s'occuper d'un bean complexe (un bean contenant un champ String 'mailsLanguages' et une ArrayList 'list') et itérer dessus pour afficher un champ HTML:text par item.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <tiles:useAttribute id="beanName" name="beanName" classname="java.lang.String" />
    
    <html:text property="${beanName}.mailsLanguages" size="70"/>
    
    <nested:iterate property="${beanName}.list" indexId="index">
        <div class="fieldSubPart">
            <nested:text property="email"/>
        </div>
    </nested:iterate>
    Une erreur est levée à la ligne en rouge ci-dessus:
    javax.servlet.jsp.JspException: Cannot find bean: "" in any scope
    at org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:864)
    at org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:236)
    at org.apache.struts.taglib.nested.logic.NestedIterateTag.doStartTag(NestedIterateTag.java:94)
    ...
    Ce qui me paraît d'autant plus incompréhensible, c'est que l'accès à une propriété du bean fonctionne bien à la ligne verte puisqu'elle ne lève aucune erreur.
    Par contre, ça ne fonctionne plus pour paramétrer mon nested:iterate.

    De plus, le même code écrit directement dans le formulaire (modulo les ${beanName} et ${fieldMessageName} remplacés par les vrais noms des attributs de mon ActionForm) fonctionne également sans souci.


    Quelqu'un aurait-il une petite idée ? Les tags 'nested' ont-ils besoin de quelque chose de particulier comparé aux tags 'html' ?

    Merci d'avance

  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
    Cela fonctionne-t'il mieux en ajoutant un tag nested:nest comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <nested:nest property="${beanName}">
       <nested:iterate property="list" indexId="index">
           <div class="fieldSubPart">
               <nested:text property="email"/>
           </div>
       </nested:iterate>
    </nested:nest>

  3. #3
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    salut,

    tout d'abord merci pour ta réponse

    J'ai tenté avec le nested:nest mais ça ne fonctionne pas mieux.
    Pire, l'erreur me semble encore plus incompréhensible:
    GRAVE: ServletException in '../tiles/xxx.jsp': Cannot find bean: "" in any scope
    org.apache.jasper.JasperException: Exception in JSP: /WEB-INF/jsp/tiles/xxx.jsp:37

    34: </div>
    35:
    36: <nested:nest property="${beanName}">
    37: <nested:iterate property="list" indexId="index">
    On voit ici que l'erreur se pointe non pas sur le nested:nest qui contient le fameux ${beanName}, mais sur le nested:iterate !

    Peut-être une histoire de 'root' du nested qui est pas le même dans la jsp indépendante par rapport au même code sans utilisation de tile qui lui est intégré dans les balises 'form' ?
    En d'autres termes, faudrait-il que je déclare quelque part que je situe mes 'nested' tags dans le contexte de mon formulaire ?

    Et toujours la même question en trame de fond: pourquoi mon tag nested ne voit pas le bean alors que html:text le voit sans problème ?

  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
    Et en ajoutant le tag nested:root avec le nom du form-bean dans l'attribut name :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <nested:root name="nomDuFormBean">
       <nested:nest property="${beanName}">
          <nested:iterate property="list" indexId="index">
              <div class="fieldSubPart">
                  <nested:text property="email"/>
              </div>
          </nested:iterate>
       </nested:nest>
    </nested:root>

  5. #5
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Et en ajoutant le tag nested:root avec le nom du form-bean dans l'attribut name
    C'était bien ça !

    J'en ai d'ailleurs profité pour ajouter un nouvel attribut ${formName} pour pouvoir paramétrer ce nested:root et ainsi utiliser mon tile dans n'importe quel formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <nested:root name="${formName}">
       <nested:nest property="${beanName}">
          <nested:iterate property="list" indexId="index">
              <div class="fieldSubPart">
                  <nested:text property="email"/>
              </div>
          </nested:iterate>
       </nested:nest>
    </nested:root>
    Ca marche du tonnerre !

    Merci mille fois

  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
    De rien.

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

Discussions similaires

  1. Problème avec Vector et Iterator
    Par boudincweole10 dans le forum Langage
    Réponses: 1
    Dernier message: 08/04/2007, 07h26
  2. <nested:iterate> : Qu'ai-je oublié ?
    Par rodbeck dans le forum Struts 1
    Réponses: 2
    Dernier message: 27/02/2007, 09h38
  3. [Struts 1.2.4] Nested:iterate et ArrayList de Boolean
    Par blbird dans le forum Struts 1
    Réponses: 5
    Dernier message: 13/11/2006, 17h50
  4. [nested:iterate] erreur de bean
    Par ange458 dans le forum Struts 1
    Réponses: 2
    Dernier message: 03/10/2006, 17h08
  5. [STRUTS]Utilisation de nested:iterate
    Par chimera dans le forum Struts 1
    Réponses: 3
    Dernier message: 14/10/2005, 09h38

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