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 :

Création de composantes, les expresion #{ } ne sont pas calculées


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Par défaut Création de composantes, les expresion #{ } ne sont pas calculées
    Bonjour,

    J'ai essayer de créer des composantes JSF, mais le problème que j'ai c'est que les EL ne sont pas calculées.

    Ma class de composante:

    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
    package bf.component;
     
    import java.io.IOException;
     
    import javax.faces.component.UIOutput;
    import javax.faces.context.FacesContext;
    import javax.faces.context.ResponseWriter;
     
    public class MyOutput extends UIOutput{
    	private String myField;
     
    	public String getMyField() {
    		return myField;
    	}
     
    	public void setMyField(String myField) {
    		this.myField = myField;
    	}
    	@Override
    	public Object saveState(FacesContext context) {
    		Object[] values = new Object[2];
    		values[0] = super.saveState(context);
    		values[1] = myField;
    		return (Object)values;
    	}
    	@Override
    	public void restoreState(FacesContext context, Object state) {
    		Object values[] = (Object[])state;
    		super.restoreState(context, values[0]);
    	}
    	@Override
    	public String getFamily() {
    		return "myOutput";
    	}
    	@Override
    	public void encodeBegin(FacesContext context) throws IOException {
    		ResponseWriter writer = context.getResponseWriter();
    		writer.startElement("p", this);
    			writer.write("Salam: "+myField);
    		writer.endElement("p");
    	}
    	@Override
    	public void encodeEnd(FacesContext context) throws IOException {
    		super.encodeEnd(context);
    	}
    }
    mon tag:
    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
    package bf.component;
     
    import javax.el.ValueExpression;
    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.webapp.UIComponentELTag;
     
    public class MyOutputTag extends UIComponentELTag {
    	private ValueExpression myField;
    	public ValueExpression getMyField() {
    		return myField;
    	}
     
    	public void setMyField(ValueExpression myField) {
    		this.myField = myField;
    	}
     
    	@Override
    	public String getComponentType() {
    		return "myOutput";
    	}
     
    	@Override
    	public String getRendererType() {
    		return null;
    	}
    	@Override
    	protected void setProperties(UIComponent component) {
    		// TODO Auto-generated method stub
    		super.setProperties(component);
    		MyOutput myOutput = (MyOutput)component;
     
    		if(myField != null){
    			if(myField.isLiteralText()){
     
    				String test = (String)myField.getValue(FacesContext.getCurrentInstance().getELContext());
    				component.setValueExpression("myField", myField);
     
    			}
    			else{
    				myOutput.setMyField(myField.getExpressionString());
    			}
    		}
    	}
     
    }
    mon 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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!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>arcmind</short-name>
       <uri>http://faico.com/jsf/component/tags</uri>
       <description>Faico tags</description>
    <tag>
          <name>myOutput</name>
          <tag-class>bf.component.MyOutputTag</tag-class>
          <body-content>JSP</body-content>
          <attribute> 
             <name>myField</name> 
             <description>The value of the label</description>
             <deferred-value>
    	      <type>
    	        java.lang.String
    	      </type>
    	    </deferred-value>
     
          </attribute> 
          </tag>
       </taglib>
    faces-config.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    <component>
    		<component-type>myOutput</component-type>
    		<component-class>bf.component.MyOutput</component-class>
    		<property>
    	      <description>
    	        Hotspot coordinates if we synthesize an ImageArea bean.
    	      </description>
    	      <property-name>myField</property-name>
    	      <property-class>java.lang.String</property-class>
    	    </property>
    	</component>

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Personnellement, dans mes composants persos, si j'ai un attribut nom par exemple, les setter et getter ressemblent à ça :

    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
    private String nom;
     
    public void setNom(String nom) {
        this.nom = nom;
    }
     
    public String getNom() {
        if (nom != null) {
            return nom;
        }
        ValueBinding vb = getValueBinding("nom");
        if (vb != null) {
            return (String) vb.getValue(getFacesContext());
        }
        return null;
    }
    A noter que j'ajoute cela dans ma classe de composant, héritant plus ou moins directement du UIComponentBase.
    A noter également que là j'utilise des ValueBinding, qui sont dépréciés, mais on peut faire avec des ValueExpression aussi...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre expérimenté
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public java.lang.String getAlt() {
                if (null != this.alt) {
                     return this.alt;
                 }
                ValueExpression _ve = getValueExpression("alt");
                 if (_ve != null) {
                     return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
              } else {
                    return null;
                }
             }
    aussi on dit evalue pas calcule

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Par défaut
    Merci a vous tous,

    Mais le problème est dans la méthode setProperties (MyOutputTag):
    la valeur de myField.isLiteralText() est toujours true même si ds la page jsp je met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <bf:myOutput myField="#{bean.property}"></bf:myOutput>

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/12/2006, 17h53
  2. Les limites ne sont pas prises en compte
    Par Atamix dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/12/2006, 12h41
  3. [SQL] Les variables ne sont pas UPDATEES
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/09/2006, 17h30
  4. Réponses: 1
    Dernier message: 04/12/2005, 18h02
  5. Les Langages ne sont pas tous les mêmes ......
    Par Max Payne dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 28/08/2003, 13h51

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