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 :

[JSTL] <c:if> avec une List


Sujet :

Struts 1 Java

  1. #1
    Membre éprouvé
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Points : 1 180
    Points
    1 180
    Par défaut [JSTL] <c:if> avec une List
    Bonjour,


    J'aimerais tester qu'une liste avec vide.

    Pour ce faire, j'ai dans un premier utilisé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <% if (!c.getCompteEpargneList().isEmpty()) {%>
    	la liste est non vide
    <% } %>
    Mais si je teste avec un <c:if>, plus rien ne marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <c:if test="${! empty session.client.compteEpargneList}">
    	la liste est non vide
    </c:if>
    J'ai également essayé avec <logic:notEmpty> ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <logic:notEmpty name="${request.client.compteEpargneList}">
    	la liste est non vide
    </logic:notEmpty>
    J'ai essayé aussi avec cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <c:if test="${! empty client.compteEpargneList}">
    <c:if test="${!client.compteEpargneList.empty}">
    <c:if test="${!client.compteEpargneList.isEmpty}">
    Quelqu'un aurait une idée ?

    J'ai une classe "Client" qui contient une méthode "getCompteEpargneList()" qui renvoie une List.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public List getCompteEpargneList() {
    	return Collections.unmodifiableList(compteEpargneList);
    }

  2. #2
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 086
    Points : 1 961
    Points
    1 961
    Par défaut
    Pourquoi tu test avec un c:if sur un scope (session) puis apres tu fais sur un autre scope avec logic (request)
    Il faudrait deja determiner le scope dans un premier temps

    Comment as tu envoyé ta variable ?
    Dans ton action je suppose ?
    As tu envoyé à ta JSP avec un truc du genre request.setAttribute ?

  3. #3
    Membre éprouvé
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Points : 1 180
    Points
    1 180
    Par défaut
    Je n'ai pas essayé le <c:if> et le <logic:notEmpty> en même temps.
    Mais que je mette le scope ou pas, ça ne change rien. Aucune des façons de faire ne marche.

    Et la redirection vers cette page se fait selon le fichier "struts-config.xml".

    J'ai une page de login du client, et une fois connecté, ça m'affiche la page principale, avec la liste des comptes.

    strus-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <action path="/login" name="LoginForm" 
    		scope="request"
    		type="com.bankonet.control.LoginAction" 
    		input="/jsp/Login.jsp" parameter="seLogger">
    	<forward name="success" path="/jsp/PagePrincipale.jsp" />
    	<forward name="fail" path="/jsp/ErreurLogin.jsp" />
    </action>
    J'ai une classe LoginAction dans laquelle je récupère le client :
    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
     
    public class LoginAction extends MappingDispatchAction {
     
    	public ActionForward seLogger(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    			throws Exception {
     
    		LoginForm mesParams = (LoginForm) form;
    		String id = mesParams.getIdentifiant();
    		String mdp = mesParams.getMotDePasse();
     
    		try{
    			Client cl = new BanqueService().findClient(id, mdp);
    			request.setAttribute("client", cl);
    			return mapping.findForward("success");
    		} catch (BankonetException e){
    			return mapping.findForward("fail");
    		}
    	}
    }
    Je sais qu'il me récupère correctement le client, puisqu'il m'affiche son nom et son prénom.
    Mais visiblement, il n'arrive pas à tester la List.

  4. #4
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 086
    Points : 1 961
    Points
    1 961
    Par défaut
    Tu dis que tu récupère bien le client parce que tu as bien le prénom/nom.

    As tu essayé avec le prénom ou le nom par exemple ?

  5. #5
    Membre éprouvé
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Points : 1 180
    Points
    1 180
    Par défaut
    Oui.

    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <c:if test="${not empty client.prenom}">
    	<c:out value="${client.prenom}" />
    </c:if>
    Cela marche.


    Si je remplace le prénom par ma liste, j'ai cette erreur :
    javax.servlet.ServletException: javax.servlet.jsp.el.ELException: An error occurred while getting property "compteEpargneList" from an instance of class com.bankonet.model.Client
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:837)

  6. #6
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 086
    Points : 1 961
    Points
    1 961
    Par défaut
    Le test te dis que que l'attribut prenom n'est pas vide ce qui est vrai...

    Humm, tu dois en effet pas pouvoir tester directement si une liste est vide ou pas.

    J'ai regardé la javadoc de ArrayList est en effet il y a une methode isEmpty.

    Donc je pense que l'appel n'est pas correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:if test="${!client.compteEpargneList.isEmpty}">
    essaie plutot de voire si tu peux pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:if test="${!client.compteEpargneList.isEmpty()}">

  7. #7
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Le code suivant devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:if test="${not empty client.compteEpargneList}">
    Peux-tu montrer comment tu as défini la propriété compteEpargneList dans la classe Client ?

  8. #8
    Membre éprouvé
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Points : 1 180
    Points
    1 180
    Par défaut
    Citation Envoyé par weed Voir le message
    essaie plutot de voire si tu peux pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:if test="${!client.compteEpargneList.isEmpty()}">
    ça me renvoie cette erreur :
    org.apache.jasper.JasperException: /jsp/PagePrincipale.jsp(31,3) The function isEmpty must be used with a prefix when a default namespace is not specified
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
    --------------------------
    Citation Envoyé par c_nvy Voir le message
    Le code suivant devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:if test="${not empty client.compteEpargneList}">
    Peux-tu montrer comment tu as défini la propriété compteEpargneList dans la classe Client ?
    ça ne marche pas non plus, je l'avais déjà essayé, je l'ai mis plus haut.
    La propriété compteEpargneList correspond à la méthode que j'ai mis dans mon premier post.
    Et qui plus est, elle fonctionne lorsque je l'utilise avec un scriptlet.

  9. #9
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Tu n'as pas répondu à ma question.
    Tu as donné le code de la méthode getCompteEpargneList() mais on ne voit pas comment tu as défini la propriété compteEpargneList dans la classe Client.

    As-tu ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private List compteEpargneList=new ArrayList() ;

  10. #10
    Membre éprouvé
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Points : 1 180
    Points
    1 180
    Par défaut
    Non, enfin presque.

    J'ai ceci (extrait) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Client {
     
    	private List compteEpargneList;
     
    	public void setCompteEpargneList(List compteEpargneList) {
    		this.compteEpargneList = compteEpargneList;
    	}
     
    	public List getCompteEpargneList() {
    		return Collections.unmodifiableList(compteEpargneList);
    	}
     
     
    }

  11. #11
    Membre éprouvé
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Points : 1 180
    Points
    1 180
    Par défaut
    Si je fais cela dans ma JSP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <c:if test="${not empty client.compteEpargneList}">
    	<c:out value="${client.prenom}" />
    </c:if>
    Et que je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private List compteEpargneList=new ArrayList() ;
    dans ma classe, je n'obtiens pas d'erreur, le code est interprété (invisible dans le code source), mais il ne m'écrit pas le prénom.

    Je crois qu'il a un problème pour récupérer la liste ...

  12. #12
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Mais à quel moment remplis-tu compteEpargneList ?

  13. #13
    Membre éprouvé
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Points : 1 180
    Points
    1 180
    Par défaut
    J'ai une interface CompteDAO qui doit faire le lien avec la base de données (qui est bien remplie elle !).

    Par contre tu as raison, je vais m'orienter plutôt par là. Ce qui est étrange c'est qu'avec les scriptlets cela marchait. Mais j'ai dû oublier un détail important quelque part. Je ne trouve pas où la liste se remplit.

  14. #14
    Membre éprouvé
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Points : 1 180
    Points
    1 180
    Par défaut
    Bon, j'ai trouvé comment ma liste se remplit.

    Reste à voir pourquoi elle ne se remplit pas.

    En fait, lorsque mon client se loggue, je récupère les informations le concernant en me connectant à la base (via une couche service et une couche DAO), et à ce moment-là je peux récupérer la liste des comptes associée au client.
    Mais cela est déclenché sur l'action précédente, LoginAction.

    Je vais chercher encore ce qui manque ....

  15. #15
    Membre éprouvé
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Points : 1 180
    Points
    1 180
    Par défaut
    Après moultes lectures et relectures du code, j'ai enfin trouvé la raison de mon problème.

    En fait j'étais sur une webapp "bouchonnée", qui n'avait pas un accès direct à la base de données.
    Les données étaient donc insérées via d'autres classes java que je n'avais pas encore explorées, sauf pour le login du client.

    Il me reste donc à refaire ma dernière classe pour qu'elle accède à la classe qui comporte les données.

    Voilà, Résolu


    Merci pour ton aide c_nvy

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

Discussions similaires

  1. liaison zone de texte avec une liste
    Par FlIpMaN dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/02/2006, 23h39
  2. [MySQL] Problème avec une liste déroulante
    Par leloup84 dans le forum SQL Procédural
    Réponses: 19
    Dernier message: 24/01/2006, 12h57
  3. Réponses: 7
    Dernier message: 24/01/2006, 11h03
  4. alligner des textbox (input) avec une liste
    Par sundjata dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 20/01/2006, 15h16
  5. Remplir 3 champs textes différents avec une liste déroulante
    Par azorol dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/12/2005, 00h04

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