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 :

Erreur avec le paramètre binding


Sujet :

JSF Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut Erreur avec le paramètre binding
    Bonjour,

    Je connais un peu JSF mais je viens de découvrir le paramètre binding et la possibilité de faire un véritable binding html/objet. Mais je n'arrive pas à utiliser ce paramètre. J'ai suivi le tutoriel de dvp en m'aidant aussi du tutoriel de Sun, mais pas moyen. J'ai le message d'erreur suivant :
    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
     
    org.apache.jasper.JasperException: Exception in JSP: /aujourdhui.jsp:22
     
    19: 
    20:     <f:view>
    21:         <h:form>
    22:             <h:dataTable binding="#{bank.dataTable}" value="#{bank.customers}" var="aCustomer" border="1">
    23:                 <h:column>
    24:                     <f:facet name="header">
    25:                         <f:verbatim>Prénom</f:verbatim>
     
     
    Stacktrace:
    	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
    	com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
    	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
    	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
    	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
    	javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
    Pouvez-vous m'aider à résoudre mon problème ? Je ne comprends pas bien l'origine car tout fonctionne sauf ce fameux paramètre binding. Y a-t-il quelque chose à déclarer dans faces-config.xml ?

  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
    Salut,

    Il manque le code de ton bean bank. Ca aiderai je pense ...

  3. #3
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    Salut Verbose,

    Pour que l'on puisse t'aider veux tu ajouter les parties utiles de ton bean "bank", ton web.xml et ton faces-config.xml

    A priori je dirai que ta page ne vois pas ton bean ou alors que le type retourne par bank.dataTable n'est pas compatible avec <h:dataTable, mais on y verra plus clair avec les autres fichiers

    Bon courage,
    Tif

    Edit: grilled...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Citation Envoyé par mad-math
    Salut,

    Il manque le code de ton bean bank. Ca aiderai je pense ...

    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
     
     * and open the template in the editor.
     */
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import javax.faces.component.UIData;
    import javax.faces.component.UISelectBoolean;
     
    /**
     *
     * @author hadrien
     */
    public class Bank {
        private List<Customer> customers = new ArrayList<Customer>();
        private UIData dataTable;
        private UISelectBoolean checkbox;
     
        public Bank() {
            customers.add(new Customer("Toto", "Duchemol"));
            customers.add(new Customer("Machin", "Durand"));
            customers.add(new Customer("Raymonde", "Missmonde"));
        }
        public void removeSelectedCustomers() {
            for(int i=0; i<customers.size(); ++i) {
                dataTable.setRowIndex(i);
                if(checkbox.isSelected()) {
                    customers.remove(i);
                }
            }
        }
        public void addCustomer() {
            Customer aCustomer = new Customer("Jean", "Dupont");
            customers.add(aCustomer);
        }
        public List<Customer> getCustomers() {
            return customers;
        }
        public void setCustomers(List<Customer> customers) {
            this.customers = customers;
        }
        public UIData getDataTable() {
            return dataTable;
        }
        public UISelectBoolean getCheckbox() {
            return checkbox;
        }
        public void setCheckbox(UISelectBoolean checkbox) {
            this.checkbox = checkbox;
        }
    }

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Est-il possible que le problème vienne de ma version de mon implémentation de JSF ? J'utilise Netbeans 5.5.1 qui embarque une implémentation de JSF 1.1 (avec les anciennes expression langage #{...})

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Citation Envoyé par TIFéç
    Salut Verbose,

    Pour que l'on puisse t'aider veux tu ajouter les parties utiles de ton bean "bank", ton web.xml et ton faces-config.xml

    A priori je dirai que ta page ne vois pas ton bean ou alors que le type retourne par bank.dataTable n'est pas compatible avec <h:dataTable, mais on y verra plus clair avec les autres fichiers

    Bon courage,
    Tif

    Edit: grilled...
    Le bean est correctement déclaré, enfin si il n'y a rien de particulier à faire pour utiliser les backing beans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <managed-bean>
        <managed-bean-name>bank</managed-bean-name>
        <managed-bean-class>tuto.beans.Bank</managed-bean-class>
        <managed-bean-scope>sesssion</managed-bean-scope>
    </managed-bean>
    Et je n'ai pas touché au web.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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        <context-param>
            <param-name>com.sun.faces.verifyObjects</param-name>
            <param-value>false</param-value>
        </context-param>
        <context-param>
            <param-name>com.sun.faces.validateXml</param-name>
            <param-value>true</param-value>
        </context-param>
        <context-param>
            <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
            <param-value>client</param-value>
        </context-param>
        <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
            </servlet>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>/faces/*</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
        <welcome-file-list>
    	<welcome-file>
                index.jsp
            </welcome-file>
        </welcome-file-list>
    </web-app>

  7. #7
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    Bon il n'y a rien de bien etrange la dedans.

    Pour ce qui est du conflit de version, je ne sais pas.

    Par contre tu essaye d'afficher un type d'objet customisé "Customer", que se passe t'il lorsque tu affiche une liste de simple String? Obtiens tu encore une erreur?

    Bon courage,
    Tif

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Citation Envoyé par verbose
    Est-il possible que le problème vienne de ma version de mon implémentation de JSF ? J'utilise Netbeans 5.5.1 qui embarque une implémentation de JSF 1.1 (avec les anciennes expression langage #{...})
    Je viens d'essayer avec une implémentation JSF 1.2, ce n'est pas mieux. Le message d'erreur n'est pas le même, mais je n'arrive toujours à rien

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Citation Envoyé par TIFéç
    Bon il n'y a rien de bien etrange la dedans.

    Pour ce qui est du conflit de version, je ne sais pas.

    Par contre tu essaye d'afficher un type d'objet customisé "Customer", que se passe t'il lorsque tu affiche une liste de simple String? Obtiens tu encore une erreur?

    Bon courage,
    Tif
    J'ai essayé avec le strict minimum :
    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
     
    <%@page contentType="text/html"%>
    <%@page pageEncoding="UTF-8"%>
     
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%--
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
    --%>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
     
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <h4>Backing Bean</h4>
     
            <f:view>
                Valeur : <h:inputText binding="#{bakingbean.value}"/>
            </f:view>
     
        </body>
    </html>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class BakingBean {
        private String value = "toto";
     
        public String getValue() {
            return value;
        }
        public void setValue(String value) {
            this.value = value;
        }
    }
    Et toujours le même message

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Si ça vous éclaire mieux que moi, voici le message que j'obtiens avec le code ci-dessus et l'implémentation JSF 1.2 :
    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
     
    org.apache.jasper.JasperException: javax.servlet.jsp.JspException: java.lang.IllegalArgumentException: argument type mismatch
    	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
    	com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
    	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
    	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
    	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
    	javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
    	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

  11. #11
    Membre confirmé

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Points : 452
    Points
    452
    Par défaut
    Bon ok, apres mettre un peu creusé la tete tout semble devenir clair:
    L'erreur te dit que le type du composant à lier et celui de l'attribut dans le bean ne correspondent pas. Et pour cause le composant est du type "HtmlInputText" et tu essaye de le lier à un string.

    Ce qu'il faut faire:
    1) Declarer un attribut de type "HtmlInputText" + getters et setters
    2) Ajouter une fonction genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public String modifyTextFieldValue() {
       this.getMonInputText().setValue("affiche ce super texte");
       return null; // ca c'est ma super navigation, null retourne sur la page
    }
    Tout ca pour ça, et pourtant on l'avait sous les yeux "argument type mismatch"

    Bon courage pour la suite,
    Tif

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Ca y est, ça marche ! Merci de t'être intéressé à mon problème. C'est exactement ce que tu décrivait. A force de ne plus comprendre l'origine du problème, j'avais retourné mon code dans tous les sens. Merci TyFeç

    PS : j'utilise le type UIInput qui est la surclasse de HtmlInputText

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

Discussions similaires

  1. [Débutant] Erreur avec requête paramétrée
    Par julien_33 dans le forum VB.NET
    Réponses: 4
    Dernier message: 23/08/2012, 18h38
  2. Réponses: 8
    Dernier message: 06/03/2008, 17h32
  3. Message d'erreur avec paramètre
    Par sir_gcc dans le forum JSF
    Réponses: 1
    Dernier message: 09/05/2007, 19h20
  4. socket : erreur avec bind()
    Par horkets dans le forum Réseau
    Réponses: 11
    Dernier message: 30/10/2006, 12h47
  5. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 22h00

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