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 :

JSTL: comment créer une variable typée dans le xhtml d'une JSF.


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 608
    Par défaut JSTL: comment créer une variable typée dans le xhtml d'une JSF.
    Bonjour,

    C'est un problème tout simple.

    J'ai besoin dans une page JSF d'initialiser un booléen, puis de le changer et de le tester un peu plus loin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <c:set var="premierThème" scope="view" value="true" />
     
    <c:choose>
       <c:when test="${premierThème}">
          <c:set var="premierThème" scope="view" value="false" />
          <td class="typeTheme">ses thèmes:</td>
       </c:when>
     
        ...
    </c:choose>
    Mon problème: pas d'attribut class ou type sur <c:set>

    Et
    <c:set var="premierThème" scope="view" value="true" />
    peut initialiser un objet String derrière ou n'importe quoi...

    Comment le forcer à instancier un objet de la classe que je veux?
    (sans en passer par un managed bean, car bien sûr c'est possible, mais ça ferait beaucoup de circonvolutions pour le travail à accomplir).

    En vous remerciant,

    Grunt.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    sans garantie, t'as essayé ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          <c:set var="premierThème" scope="view" value="${false}" />
    Parce que pour moi, c'est au niveau de la value que se joue le typage. Set ne fait jamais qu'évaluer sa valeur (via EL), prendre le résultat et le mettre dans une Map, le format ne le concerne pas.

  3. #3
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 608
    Par défaut
    Je vais l'essayer.
    Mais si j'étends le problème, ça ne me sauvera pas.

    Si je veux créer un objet de classe MaClasse, je n'aurai pas la possibilité de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:set var="monObjet" scope="view" value="${new MaClasse()}" />
    Bien-sûr, je peux en passer par une méthode de bean qui sera là juste pour me faire un new, mais bon: ça fait du code un peu envahissant.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le but du tag set est de définir une clé à une valeur récupérée par un EL. Le role des EL n'est pas de faire un script let avec création d'objet et tout le bordel. Le role des EL c'est justement que la personne qui fait les interfaces web n'a pas à connaitre la programmation.

  5. #5
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 608
    Par défaut
    J'admets le principe, et on vit agréablement avec en JSP lorsque - dans le fond - on peut toujours faire sa création en <jsp:useBean ...> ou <% MaClasse monObjet = new MaClasse(); %> même si c'est moins heureux,

    mais en JSF 2, cela n'est plus possible. On est en EL, et en EL pur. Sinon, il faut en passer par le managed bean... ce qui n'est pas plus élégant, foncièrement.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <c:foreach var="élément" items="maListe">
        <h:outputText value="Bonjour tout le monde" />
     
        <c:if test="${z_êtes_nouveau_vous}">
            <c:set var="monObjet" value="... ici je voudrais créer une instance de cet objet ..." />
            <h:outputText value="Ca fait plaisir de vous recontrer!" />
        </c:if>
    </c:foreach>

    Quel est le scope de la variable monObjet que je voudrais avoir, idéalement?
    Locale, avec une stricte zone d'existence entre <c:if> et </c:if>

    Et que se passe t-il?
    1) Je ne peux pas créer une variable locale de la classe que je veux.
    2) La portée la plus fine que je peux lui donner, c'est view.

    Et quand on y pense, c'est délirant. On s'est battus en programmation séquentielle puis objet pour éliminer les variables globales et obtenir des variables locales à la portée définissable dans un périmètre très restreint, et voici que JSF par un défaut d'écriture, met tout par terre.

    Et c'est à mes yeux, sans aucun appel, une régression.

    Grunt.

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/10/2010, 23h06
  2. Réponses: 5
    Dernier message: 09/07/2008, 17h04
  3. Réponses: 3
    Dernier message: 27/11/2006, 14h16
  4. Réponses: 1
    Dernier message: 26/08/2006, 09h18
  5. DEBUTANT Lire dans une variable type CString
    Par Hokagge dans le forum MFC
    Réponses: 2
    Dernier message: 01/12/2005, 10h53

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