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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    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
    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 éprouvé

    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 222
    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 émérite
    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
    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 éprouvé

    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 222
    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 émérite
    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
    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 éprouvé

    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 222
    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()}">

+ 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