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

JSF Java Discussion :

Encore un problème de passage de paramètre jsp -> bean ? Oui, encore.


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 25
    Par défaut Encore un problème de passage de paramètre jsp -> bean ? Oui, encore.
    Bonjour à tous !

    La réponse se trouve peut être déjà sur le forum ou dans la FAQ, mais ce que j'y ai trouvé ne s'applique a priori pas à mon cas...

    Peut être est-ce aussi parce que je ne prends pas le problème par le bon bout

    Quoi qu'il en soit, voici ce que je souhaite faire :

    Mes page JSP/JSF ne doivent afficher des images que sous certaines conditions.
    Ces images sont différentes dans chacune de mes pages et sont générées au besoin.

    Je sais si j'affiche ou non l'image en vérifiant des trucs dans ma partie métier, ces "trucs" pouvant changer d'une minute à l'autre, bien entendu.
    (Et si je ne peux pas afficher l'image, j'affiche autre chose, la condition d'affichage de cet autre chose étant bien entendu l'opposé de celle de la l'image).

    J'utilise l'attribut rendered pour décider si j'affiche ou non l'image. La question est : quoi mettre dans ce rendered...

    Voici comment je fonctionne actuellement (pas beau) :

    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
    21
    22
    23
    24
     
    <%
    UnBeanUtil l_ubu = (UnBeanUtil) session.getAttribute("unBeanUtil");
    session.setAttribute("isOkForImage1",l_ubu.isOkForImage("1"));
    session.setAttribute("isOkForImage2",l_ubu.isOkForImage("2"));
    session.setAttribute("isOkForImage3",l_ubu.isOkForImage("3"));
    session.setAttribute("isOkForImage4",l_ubu.isOkForImage("4"));
    %>
     
    [...]
     
    <h:graphicImage styleClass="unStyle" value="/image?imageType=1" rendered="#{isOkForImage1}"/>
     
    [...]
     
    <h:graphicImage styleClass="unStyle" value="/image?imageType=2" rendered="#{isOkForImage2}"/>
     
    [...]
     
    <h:graphicImage styleClass="unStyle" value="/image?imageType=3" rendered="#{isOkForImage3}"/>
     
    [...]
     
    <h:graphicImage styleClass="unStyle" value="/image?imageType=4" rendered="#{isOkForImage4}"/>
    Quel est le fonctionnement à adopter en JSF (j'apprends un peu sur le tas là...) ??
    • Passer des <f:param value....> ne s'applique pas à mon cas je pense, puisque je devrais passer plusieurs fois le paramètre.
    • Créer une fonction "isOkForImage()" par image n'est pas une solution satisfaisante pour moi, je préfère avoir quelque chose de générique :-)


    Merci !

  2. #2
    Membre éprouvé Avatar de rushtakn
    Inscrit en
    Mai 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 213
    Par défaut
    Le principe en JSF c'est de stocker dans un managed-bean (bean dont le cycle de vie est géré par JSF mais ça je pense que tu le sais deja) les propriétés dont on a besoin dans la vue.
    Typiquement tes attributs isOkForImagei devraient être accédés par #{tonBean.isOkForImagei} ou tonBean est le nom de ton managed-bean déclaré dans le faces-config.

    Apres dans ce bean tu peux réaliser toute la logique applicative qui te permet de mettre à jour la valeur de chacune des propriétés isOkForImagei, à la création du bean (appel d'une méthode dans le constructeur) ou apres un évènement utilisateur (clic sur un bouton ...).

    Concrètement, comme je vois les choses (sachant que je sais pas totalement saisi ce que tu veux faire) :
    Ton mangaged-bean :
    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
    public class Bean {
    	private boolean isOkForImage1;
    	private boolean isOkForImage2;
    	...
     
    	public Bean() {
    		truc();
    	}
     
    	private void truc() {
    		// Mise à jour des attributs
    		...
    	}
     
    	// Getters / Setters
    }
    Puis dans ta jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <h:graphicImage styleClass="unStyle" value="/image?imageType=1" 
    	rendered="#{bean.isOkForImage1}"/>
    <h:graphicImage styleClass="unStyle" value="/image?imageType=2"
    	rendered="#{bean.isOkForImage2}"/>
    Voila un début je pense.

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    et on n'utilise jamais des scriptlets jsp dans les pages JSF..

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 25
    Par défaut
    Merci pour vos réponses, voici la mienne :-)

    Sniper37 -> C'est justement pour ça que je demande de l'aide :-) L'existant n'est pas terrible, je cherche à faire mieux.

    rushtakn -> Je vais essayer d'être plus clair sur ce que je veux faire, car j'ai l'impression qu'avec ce que tu me dis, je ne m'en sortirai pas.

    1*/ J'ai une fonction "public boolean testImage(String img)" qui me permet de savoir si l'image "img" doit être affichée ou non.

    2*/ Je fonctionne avec un framework bien merdique (avis perso) qui est StrutsFaces (Struts + JSF mélangés).

    3*/ Lorsque je clique sur un lien pour arriver sur ma page, je passe d'abord dans une action Struts, puis j'arrive sur ma page JSP/JSF


    Ce que je souhaite faire, c'est, "depuis ma page JSP/JSF", faire des appels à ma fonction "testImage" avec à chaque fois un paramètre différent, ceci afin de savoir si j'affiche l'image ou pas.
    Si je n'avais pas de paramètre à passer, je ferais un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h:graphicImage styleClass="unStyle" value="/image?imageType=1" 
    	rendered="#{bean.testImage}"/>
    Mais j'ai un paramètre à passer (et ce, plusieurs fois dans la même page).

    Une solution serait de faire ces appels là au niveau de mon Action Struts (et de sauvegarder les résultats dans un managed bean de scope request), mais je préférerais gérer tout cela en JSF pur (c'est un caprice).


    J'ai plusieurs pages sur un modèle similaire, qui utilisent le même managed-bean. Lancer la fonction "testImage()" est couteux, donc il faut que je la lance uniquement sur les images nécessaires. Donc faire ce traitement à la création de mon managed-bean (bean de scope "request" par exemple) est trop couteux, puisqu'il ne "sait" pas ce qui me sera nécessaire (je ne le sais que dans mon Action Struts), et donc je serais obligé de lancer le test sur toutes les images.

    Je pourrais lancer ce test dans le managed-bean depuis mon Action Struts, mais ça revient à faire ce que je ne souhaite pas (Lancer les tests depuis Struts).

    Je ne sais pas si je suis plus clair :-)

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu ne peux pas utiliser EL pour passer des paramètres à une fonctions.
    tu peux soit :

    - utiliser un booléen et dans le getter faire le calcul. donc, dans le rendered tu donne la valeur du booléen.

    - utiliser une fonction qui modifie le booléen suivant l'image, tu l'appel sur un actionListener ou dans ton action Struts.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 25
    Par défaut
    Ok, merci, donc ça confirme ce que je pensais : j'ai une mauvaise approche

    En gros, lors de la génération de la page, si on a besoin de passer des paramètres, il faut déjà avoir fait ses calculs avant (Action Struts, Instanciation du managed-bean, etc...) et ne faire que les exploiter pour l'affichage...

Discussions similaires

  1. Problème de passage des paramétrés aux entity Beans
    Par herguem dans le forum Java EE
    Réponses: 1
    Dernier message: 07/06/2012, 14h13
  2. Problème de passage de paramètres aux Entity Beans
    Par herguem dans le forum Glassfish et Payara
    Réponses: 0
    Dernier message: 27/02/2012, 17h46
  3. [template] problème de passage de paramètres
    Par vinny_the_true dans le forum C++
    Réponses: 2
    Dernier message: 14/12/2005, 01h15
  4. Réponses: 9
    Dernier message: 13/05/2005, 03h13
  5. problème de passage de paramêtre sous mozilla
    Par mat10000 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 27/09/2004, 10h48

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