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 :

Problème avec un Custom component


Sujet :

JSF Java

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut [Facelets] Problème avec un Custom component
    Bonjour,

    j'ai essayé de suivre le tutoriel pour le spinner du bouquin "core JSF"
    Seulement mon spinner ne s'affiche pas

    J'ai donc un fichier UISpinner.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    package ccjava.presentation.deposeroffre.composants;
    ...
    public class UISpinner extends UIInput {
    ...
    }
    Un fichier SpinnerTag.java
    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
     
    package ccjava.presentation.composants;
    ...
    public class SpinnerTag extends UIComponentTag {
        private String minimum = null;
        private String maximum = null;
        private String size = null;
        private String value = null;
     
        public String getRendererType() {
            return null;
        }
     
        public String getComponentType() {
            return "spinner";
        }

    dans mon faces-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      <component>
        <component-type>spinner</component-type>
        <component-class>ccjava.presentation.composants.UISpinner</component-class>
      </component>
    dans mon WEB-INF/customs.tld
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    <?xml version="1.0" encoding="windows-1252" ?>
     <!DOCTYPE taglib
     PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
     "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
    <taglib>
      <tlib-version>0.03</tlib-version>
      <jsp-version>1.2</jsp-version>
      <short-name>cf</short-name>
      <uri>/WEB-INF/customs.tld</uri>
      <description>This tag library contains a spinner tag</description>
      <tag>
        <name>spinner</name>
        <tag-class>ccjava.presentation.composants.SpinnerTag</tag-class>
        <attribute>
          <name>binding</name>
          <description>A value binding that points to a bean property</description>
        </attribute>
        <attribute>
          <name>id</name>
          <description>The client id of this component</description>
        </attribute>
        <attribute>
          <name>rendered</name>
          <description>Is this component rendered?</description>
        </attribute>
        <attribute>
          <name>minimum</name>
          <description>The spinner minimum value</description>
        </attribute>
        <attribute>
          <name>maximum</name>
          <description>The spinner maximum value</description>
        </attribute>
        <attribute>
          <name>size</name>
          <description>The size of the input field</description>
        </attribute>
        <attribute>
          <name>value</name>
          <required>true</required>
          <description>The value of the spinner</description>
        </attribute>
      </tag>
    </taglib>
    et dans mon fichier JSPX (j'utilise facelets)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version='1.0' encoding='windows-1252'?>
    <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"
              xmlns:h="http://java.sun.com/jsf/html"
              xmlns:f="http://java.sun.com/jsf/core"
              xmlns:ui="http://java.sun.com/jsf/facelets"
              xmlns:cf="/WEB-INF/customs.tld">
    ...
    avant<cf:spinner value="1950" rendered="true" id="yearSpinner" minimum="1900" maximum="2100" size="5" binding="#{loginMB.spinner}"/>après
    J'obtient
    "avantaprès"

    Le spinner n'apparait pas.

    Aucune erreur de compile.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Le problème semble être que Facelets n'interprête pas mon custom component... En effet, si j'utilise le même code dans un projet sans facelets ça marche très bien.

    Si quelqu'un pouvait m'expliquer comment utiliser des custom components JSF dans une appli qui utilise Facelets ...

    Merci

  3. #3
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour.
    En effet, ton souci vient de facelets : elle ne prend pas en charge les .tld mais plutôt les fichiers taglib.xml.
    Je ne sais pas pour les components en java (j'en fais avec facelets + des pages xhtml), fais juste une recherche sur comment créer un taglib.xml pour un component.

    Bonne chance.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Ta piste était la bonne, je te remercie
    J'ai donc ajouté un fichier customs.taglib.xml

    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
     
    <?xml version="1.0" encoding="windows-1252" ?>
    <!DOCTYPE facelet-taglib PUBLIC
      "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
      "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
     
     
     
    <facelet-taglib>
        <namespace>/WEB-INF/customs</namespace>
        <tag>
          <tag-name>spinner</tag-name>
          <component>
            <component-type>spinner</component-type>
          </component>
        </tag>
    </facelet-taglib>
    Maintenant mon composant s'affiche, mais aucun évènement n'est géré...

    [EDIT]
    Cherchez pas le boulet qui met pas son submit dans un form ! c'est moi
    Reste un autre problème.

    Avant (sans facelets) j'avais le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class UISpinner extends UIInput 
    {
    ...
            Integer minimum = (Integer)(getAttributes().get("minimum"));
            Integer maximum = (Integer)(getAttributes().get("maximum"));
    }
    J'ai été obliger de modifier ce bout de code ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class UISpinner extends UIInput 
    {
    ...
            Integer minimum = new Integer((String)getAttributes().get("minimum"));
            Integer maximum = new Integer((String)getAttributes().get("maximum"));
    ...
    }
    pour ne pas avoir de ClassCastException...


    JSF me retrourne un integer quand je récupère un attribut.
    Facelets me retourne une String.
    Comment ça se fait ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    Je me permets de relancer ce topic suite à un problème que j ai rencontré avec Facelets pour intégrer avec des composants JSF que j'ai développé.
    En effet, j'ai développé quelques composants JSF, et maintenat je veux utiliser les Facelets, mais le problème c'est que mm en créant un fichier taglib.xml (comme suggéré d après les posts précédents) les Facelets ne semblent pas reconnaitre les tags de mes composants. Par ailleurs, j utilise l implémantation Trinidad d Apache de JSF, donc je ne sais pas si ça a quelque chose à voir là dedans, mais en tt cas, les tags Trinidad sont bien reconnus et interprétés.
    Le problème que je rencontre me bloque pour le moment, et mes tentatives pour le résoudre sont en vain.
    Si quelqu un a une idée, ou une proposition, je suis preneur.

    Merci


    Edit

    Cest bon, ; c'était la bonne solution que de créer le taglib.xml. Cest moi qui m était trompé dans le namespace.

    Merci.

  6. #6
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Facelets et custom tags
    Comment as-tu déclarer ta facelet taglib dans ton web.xml ?
    Voici un example :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     <!-- ************************** -->
     <!-- * Facelet configuration  * -->
     <!-- ************************** -->
     <context-param>
      <param-name>facelets.LIBRARIES</param-name>
      <param-value>
       /WEB-INF/jsf/tomahawk.taglib.xml  
       ;/WEB-INF/facelets/facelet-config.xml
       <!--    
       ;/WEB-INF/chartcreator.taglib.xml
        -->
      </param-value>
     </context-param>
    Le tutoriel complet se trouve sur :
    Facelets,Maven et Tomahawk dans JSF

Discussions similaires

  1. Problème avec un custom repository
    Par midoriiro dans le forum Doctrine2
    Réponses: 2
    Dernier message: 09/01/2013, 21h18
  2. [VS] problèmes avec mon custom control
    Par dark poulpo dans le forum C#
    Réponses: 15
    Dernier message: 07/02/2012, 10h56
  3. Problème avec list.Contains() d'une liste custom
    Par Poussy-Puce dans le forum C#
    Réponses: 1
    Dernier message: 15/07/2008, 23h14
  4. Réponses: 1
    Dernier message: 25/06/2008, 10h09
  5. Problème methodBinding dans un custom component
    Par caipirinha dans le forum JSF
    Réponses: 2
    Dernier message: 14/03/2007, 10h28

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