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 :

Appel d'action avec JSF


Sujet :

JSF Java

  1. #1
    Membre éprouvé Avatar de et.rond.et.rond
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 110
    Par défaut Appel d'action avec JSF
    Bonjour,

    Je suis en train de découvrir JSF et Hibernate. Grâce à plusieurs tutoriels de developpez.com j'ai déjà réussi à afficher une liste d'objet et avec le tutoriel suivant j'ai fait une vue qui affiche un formulaire pour pouvoir éditer un objet :
    http://beuve.developpez.com/tutoriel/j2ee/Spring/CRUD/

    Le problème est qu'en suivant ce tutoriel je n'arrive pas à faire fonctionner l'action qui enregistre les modifications.
    J'ai fait la méthode suivante pour enregistrer l'objet "Ligne" avec Hibernate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        public String updateLigneAction()
        {
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
     
            session.beginTransaction();
     
            session.save(this.ligne);
     
            session.getTransaction().commit();
     
     
            return "success";
        }
    et je l'appelle comme ça dans la page JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        <html:form id="editToDoForm">
            <html:panelGrid columns="2">
                <html:outputText value="Id : "/>
                <html:inputText  value="#{listeTest.ligne.id}"/>
                <html:outputText value="name : "/>
                <html:inputText  value="#{listeTest.ligne.name}"/>
                <html:outputText value="forname : "/>
                <html:inputText  value="#{listeTest.ligne.forname}"/>
                <html:commandButton value="Enregistrer" action="#{listeTest.updateLigneAction}"/>
            </html:panelGrid>
        </html:form>
    mais en cliquant sur "Enregistrer" j'obtient l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     javax.servlet.ServletException: javax.faces.FacesException: javax.faces.FacesException: Can't set managed bean property: 'idLigne'.
    Est ce que vous avec une idée sur ce qui pose problème ? Je n'ai pas réussi à trouver un tutoriel de base pour appeller une action avec JSF mais si vous avez des URL je veux bien jeter un coup d'oeil

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Par défaut
    C'est bizarre qu'il te parle de "'idLigne' ? tu ne sais pas ce que c'est ? une variable de bean ? un bean ? il doit bien apparaite quelque part dans ton code

  3. #3
    Membre éprouvé Avatar de et.rond.et.rond
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 110
    Par défaut
    le nom "idLigne" vient de la page qui contient le formulaire que j'ai montré dans le premie message. Cette page s'appelle "edition.jsp" et j'appelle par l'URL "edition.jsp?idLignes = 654" par exemple
    l'affichage fonctionne très bien, les champs du formulaire sont bien remplis, mais quand je veux enregistrer les modifications, il se passe le message précédant.
    Voila un extrait de mon fichier faces-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        <managed-bean>
            <managed-bean-name>listeTest</managed-bean-name>
            <managed-bean-class>com.test.ListeTest</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
            <managed-property>
                <property-name>idLigne</property-name>
                <value>#{param.idLigne}</value>
            </managed-property>
        </managed-bean>

  4. #4
    Membre éprouvé Avatar de et.rond.et.rond
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 110
    Par défaut
    j'ai séparé en 2 Bean, un pour l'affichage et un pour l'enregistrement comme là
    http://www.developpez.net/forums/sho...33&postcount=7

    et pourtant j'ai le même message d'erreur

  5. #5
    Membre éprouvé Avatar de et.rond.et.rond
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 110
    Par défaut
    j'avance, en fait mon action appelait la page edit.jsp sans argument et donc il n'arrivait pas à contruire l'objet correspondant

    par contre je n'arrive toujours pas à faire fonctionner cette action, commenr faire pour que mon objet Ligne contienne les valeurs entrées dans le formulaire et pas les données en base de données ?

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Par défaut
    je ne comprends pas vraiment ton probléme.

    En théorie lorsque tu lance una action JSf le modéle est updaté. Donc tes varibales de ton bean prennent les valeurs du formulaire (grace à tes setters).

    ensuite tu apelle une fonction qui met à jour ta BDD et puis c'est bon... non ?

  7. #7
    Membre éprouvé Avatar de et.rond.et.rond
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 110
    Par défaut
    Citation Envoyé par Shivan
    En théorie lorsque tu lance una action JSf le modéle est updaté. Donc tes varibales de ton bean prennent les valeurs du formulaire (grace à tes setters).
    bin non justement
    j'ai mis des "println" un peu partout et voila ce que j'ai comme résultat quand je clique sur le bouton "Enregistrer"
    - création du bean (qui est en scope request)
    - appel du "get" de mon objet qui devrait être mis à jour et donc ça retourne "null"
    - je recois une exception "Error testing property 'name' in bean of type null" (name est une des propriété de mon objet)

    Et à ce moment là l'exécution n'est pas passé par la méthode qui lance l'action

  8. #8
    Membre éprouvé Avatar de et.rond.et.rond
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 110
    Par défaut
    j'ai réussi, apparamment il manquant un champ caché. cette fois si je vais embêter l'auteur par MP pour lui demander parce que j'ai quand même dû faire un bricolage bizare pour y arriver
    voila la version qui execute bien la méthode "updateLigneAction" avec l'objet "Ligne" qui correspond au données du formulaire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        <h:form id="editToDoForm">
            <input type="hidden" name="idLigne" value="<h:outputText value="#{listeTest.idLigne}"/>"/>
        
            <h:panelGrid columns="2">
                <h:outputText value="name : "/>
                <h:inputText  value="#{listeTest.ligne.name}"/>
                <h:outputText value="forname : "/>
                <h:inputText  value="#{listeTest.ligne.forname}"/>
                <h:commandButton value="Enregistre" action="#{listeTest.updateLigneAction}"/>
            </h:panelGrid>
        </h:form>

  9. #9
    Nouveau candidat au Club

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2
    Par défaut idLigne
    IdLigne est un param JSF.
    Les methodes qui sont liées au param JSF sont exécutées avant le remplissage du bean spécifié dans les champs.
    Le message d'erreur raconte qu'il n'arrive pas à exécuter le methode qui set le param.
    Que raconte cette méthode?

    Jo.

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

Discussions similaires

  1. Comment appeler une page excel avec JSF
    Par rabebIF5 dans le forum JSF
    Réponses: 3
    Dernier message: 02/06/2009, 08h12
  2. Appel une action avec parametre
    Par badreddine540 dans le forum JSF
    Réponses: 4
    Dernier message: 19/05/2009, 15h25
  3. Action appelée 2 fois, avec des param différents
    Par DesiS dans le forum Struts 1
    Réponses: 2
    Dernier message: 23/08/2006, 10h47
  4. Réponses: 4
    Dernier message: 27/04/2004, 14h45
  5. Appeler une fonction avec "action" ds un
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 14h54

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