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 composant perso JSF1.2


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut Problème avec un composant perso JSF1.2
    Salut à tous,

    j'ai écrit mon propre composant et je rencontre un problème de type
    JasperException: Unable to convert string "Hello world" to class "javax.el.ValueExpression" for attribute "value"...

    mon composant n'a rien de spécial il affiche comme un outputText ce qu'on donne comme valeur à l'attribut value, voici comment j'appel mon composant sur ma page jsf :

    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
     
     
    <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
    <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
    <%@taglib prefix="my" uri="http://mycomponents.org/taglib"%>
     
       <f:view>
           <html>
               <body>
     
                   <my:Abstract value="Hello world"/>
     
               </body>
           </html>
       </f:view>
    voici la classe de tag associée :

    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
    46
    47
    48
    49
    50
     
     
    import javax.el.ValueExpression;
    import javax.faces.component.UIComponent;
    import javax.faces.webapp.UIComponentELTag;
     
    public class AbstractTag extends UIComponentELTag {
     
        public static final String COMP_TYPE = "component.widgets.UIAbstract";
        public static final String RENDER_TYPE = "component.widgets.AbstractRenderer";
     
        private ValueExpression value = null;
        private ValueExpression styleClass = null;
        private ValueExpression style = null;
     
        public String getComponentType() {
            return COMP_TYPE;
        }
     
        public String getRendererType() {
            return RENDER_TYPE;
        }
     
        protected void setProperties(UIComponent component) {
            super.setProperties(component);
            component.setValueExpression("value",value);
            component.setValueExpression("styleClass",styleClass);
            component.setValueExpression("style",style);
        }
     
        public void release() {
            super.release();
            value = null;
            styleClass = null;
            style = null;
        }
     
        public void setValue(ValueExpression value) {
            this.value = value;
        }
     
        public void setStyleClass(ValueExpression styleClass) {
            this.styleClass = styleClass;
        }
     
        public void setStyle(ValueExpression style) {
            this.style = style;
        }
     
    }
    voici la classe du composant :

    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
     
     
    import javax.faces.component.UIOutput;
     
    public class UIAbstract extends UIOutput {
     
        public static final String FAMILIY = "javax.faces.Output";
     
        public UIAbstract() {
            super();
            setRendererType("component.widgets.AbstractRenderer");
        }
     
        public String getFamily() {
            return FAMILIY;
        }
     
    }
    voici le renderer associé :

    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
    46
    47
    48
     
     
    import java.io.IOException;
    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.context.ResponseWriter;
    import javax.faces.render.Renderer;
     
    public class AbstractRenderer extends Renderer {
     
        public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
     
            ResponseWriter writer = context.getResponseWriter();
            String clientId = component.getClientId(context);
            UIAbstract abstractComp = (UIAbstract) component;
     
            writer.startElement("div", abstractComp);
     
            String styleclass = (String) abstractComp.getAttributes().get("styleClass");
            if (styleclass != null)
                writer.writeAttribute("class",styleclass,"styleclass");
     
            String style = (String) abstractComp.getAttributes().get("style");
            if (style != null)
                writer.writeAttribute("style",style,"style");
     
            writer.startElement("h3", abstractComp);
     
            String value = (String) abstractComp.getAttributes().get("value");
            if (value != null)
                    writer.write(value);
     
            writer.flush();
     
        }
     
        public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
            ResponseWriter writer = context.getResponseWriter();
            writer.endElement("h3");
            writer.endElement("div");
            writer.flush();
        }
     
        public void decode(FacesContext context, UIComponent component) {
            return;
        }  
     
    }
    et voici la taglib :

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
     
    <?xml version="1.0" encoding="UTF-8"?>
    <taglib xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
       http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
       version="2.1">
     
        <tlib-version>1.1</tlib-version>
        <jsp-version>1.2</jsp-version>
        <short-name>my</short-name>
        <uri>http://mycomponents.org/taglib</uri>
     
        <tag>
            <name>Abstract</name>
            <tag-class>component.widgets.AbstractTag</tag-class>
            <body-content>JSP</body-content>
     
            <attribute>
                <name>id</name>
                <required>false</required>
                <rtexprvalue>false</rtexprvalue>
            </attribute>
     
            <attribute>
                <name>binding</name>
            </attribute>
     
            <attribute>
                <name>rendered</name>
                <required>false</required>
                <rtexprvalue>false</rtexprvalue>
            </attribute>
     
            <attribute>
                <name>value</name>
                <required>false</required>
                <rtexprvalue>false</rtexprvalue>
            </attribute>
     
            <attribute>
                <name>styleClass</name>
                <required>false</required>
                <rtexprvalue>false</rtexprvalue>
            </attribute>
     
            <attribute>
                <name>style</name>
                <required>false</required>
                <rtexprvalue>false</rtexprvalue>
            </attribute>
        </tag>
    </taglib>
    tout est bien reconnu avec jsf1.2 mais le seul problème c'est que dès que je spécifie un attribut dans ma balise <my:Abstract value="toto" ou bien style="position:relative" ou encore styleClass=... /> j'obtiens une exception dont voici le détail :

    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
     
    org.apache.jasper.JasperException: Unable to convert string "Hello world" to class "javax.el.ValueExpression" for attribute "value": Property Editor not registered with the PropertyEditorManager
    	org.apache.jasper.runtime.JspRuntimeLibrary.getValueFromPropertyEditorManager(JspRuntimeLibrary.java:887)
    	org.apache.jsp.mapfaces_jsp._jspx_meth_mf_005fAbstract_005f0(mapfaces_jsp.java:179)
    	org.apache.jsp.mapfaces_jsp._jspx_meth_f_005fview_005f0(mapfaces_jsp.java:123)
    	org.apache.jsp.mapfaces_jsp._jspService(mapfaces_jsp.java:77)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:415)
    	com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:475)
    	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:143)
    	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
    	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    	javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)

    voila si qq1 a rencontrer ce genre d'exception merci de m'aider

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    J'ai résolu mon problème, il suffisait d'ajouter un <deferred-value> pour mes attributs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    <attribute>
                <name>value</name>
                <deferred-value>
                    <type>java.lang.String</type>
                </deferred-value>
                <required>false</required>
                <rtexprvalue>false</rtexprvalue>
                <description>
                    The abstract string value.
                </description>
    </attribute>

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

Discussions similaires

  1. Problème avec le composant JScrollPane
    Par vidocq dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 04/04/2006, 09h02
  2. Problème avec un composant fait maison
    Par gandf dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/07/2005, 13h30
  3. problème avec le composant TSQLQuery
    Par vbcasimir dans le forum Bases de données
    Réponses: 6
    Dernier message: 31/05/2005, 16h45
  4. Problème avec le composant TXMLDocument
    Par kurul1 dans le forum C++Builder
    Réponses: 9
    Dernier message: 14/04/2005, 15h36
  5. Problème avec des composants non déclarés
    Par vbcasimir dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/01/2005, 11h17

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