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 :

Exécuter une classe java via l'attribut action de <h:commandButton>


Sujet :

JSF Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Exécuter une classe java via l'attribut action de <h:commandButton>
    Bonjour,

    je travaille sur un projet en JSF sous Netbeans et mon problème est le suivant :

    - j'ai développé une vue jsf : index.xhtml voici son code :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:f="http://java.sun.com/jsf/core"      
          xmlns:h="http://java.sun.com/jsf/html">
     
        <h:head>
            <title>Suppression du contenu de la Table MySQL</title>
        </h:head>
        <h:body>
        	<h:form>
        	   <h:commandButton value="Vider la table" action="#{Delete}"></h:commandButton>
        	</h:form>
        </h:body>
    </html>
    - et voici la classe Delete.java appelée par l'attribut action de <h:commandButton> :

    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
    import java.sql.*;
     
    public class Delete{
      public static void main(String[] args) {
      System.out.println
    ("Example for Deleting All Rows from a database Table!");
      Connection con = null;
      try{
      Class.forName("com.mysql.jdbc.Driver");
      con = DriverManager.getConnection
    ("jdbc:mysql://localhost:3306/jdbctutorial", "root", "root");
      try{
      Statement st = con.createStatement();
      String sql = "DELETE FROM employee";
      int delete = st.executeUpdate(sql);
      if(delete == 0){
      System.out.println("All rows are completelly deleted!");
      }
      }
      catch(SQLException s){
      System.out.println("SQL statement is not executed!");
      }
      }
      catch (Exception e){
      e.printStackTrace();
      }
      }
    }
    Mon problème est quand je clique sur le bouton : "Vider la table" dans la page index.xhtml rien ne se passe (la classe Delete.java) n'est pas appelée (exécutée)).

    je demande si vous avez une solution pour mon problème ou toute autre solution qui permettra d’exécuter cette classe Java à partir du bouton de la vue jsf.


    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Bonjour,

    L'attribut action fait appel à une méthode d'une classe (d'un bean pour être plus précis) et non une classe elle-même.

    Ton code devrais plutôt ressembler à ceci :

    Dans index.xhtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandButton value="Vider la table" action="#{monManagedBean.delete}" />
    Ta classe représentant ton managed bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class MonManagedBean {
     
        public void delete() {
            /* Code à exécuter */
        }
     
    }
    Pour déclarer ton managed bean :
    • Si tu utilises JSF 2.x, l'annotation @ManagedBean suffit
    • Sinon, tu doit renseigner le fichier faces-config.xml


    Pour plus d'informations, tu peux te référer aux liens ci-dessous :
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour la réponse,

    j'ai essayé votre solution et ça ne marche toujours pas !!

    voici le code ma classe managed bean qui contient ma méthode Delete:

    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
    55
    56
    57
    package projet;
     
    import logs.util.JsfUtil;
    import logs.util.PaginationHelper;
     
    import java.io.*;
    import java.util.ResourceBundle;
    import java.lang.Object;
    import java.sql.*;
    import javax.ejb.EJB;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.convert.Converter;
    import javax.faces.convert.FacesConverter;
    import javax.faces.model.DataModel;
    import javax.faces.model.ListDataModel;
    import javax.faces.model.SelectItem;
     
    @ManagedBean(name = "accessLogController")
    @SessionScoped
    public class AccessLogController implements Serializable {
     
    public AccessLogController() {
     
        }
     
     
    public void  Delete() {
     
    Connection con = null;
    try{
     
    Class.forName("com.mysql.jdbc.Driver");
    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/base", "login", "password");
     
    try{
     
    Statement st = con.createStatement();
    String sql = "DELETE FROM test";
    st.executeUpdate(sql);           
     
    }
     
    catch(SQLException s){
    System.out.println("SQL statement is not executed!");
                  }
     
    }
     
    catch (Exception e){
    e.printStackTrace();            
     
    }
     
    }
    et voici le code de ma bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandButton value="SubmitQuery" action="#{accessLogController.delete}"></h:commandButton>
    et quand je clique sur le bouton rien ne se passe !

  4. #4
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Java est case-sensitive.

    La méthode Delete définie dans la classe commence par une majuscule alors que l'appel dans le fichier XHTML (#{monManagedBean.delete}) commence par une minuscule.

    Les conventions de nommage indiquent que les noms de méthodes doivent commencer par un minuscule.

    Le code de ta classe devient donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void  delete() {
        ...
    }
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  5. #5
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    si je puis me permettre, ouvrir et fermer une connexion JDBC à sur chaque bouton JSF (ou liens) tu vas vite avoir des problèmes de performance ! (et après on va dire que c'est JAVA qui est lent )

    C'est quand même une sacrée mauvaise pratique.

    Tu devrais passer par un DataSource que tu récupères auprès de ton serveur d'applications. C'est ton serveur d'application sera paramétré pour se connecter à la base de données avec un pool de connexions.

    Tu as un exemple ici :
    http://christophej.developpez.com/tu...ee/pooltomcat/

    et en JSF tu as @Resource pour injecter directement un DataSource géré par le serveur d'applications.
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

Discussions similaires

  1. Comment exécuter une class java dans JSP
    Par sousou12 dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 17/03/2014, 15h51
  2. Appeler une méthode d'une classe JAVA via Javascript
    Par iliass001 dans le forum Général Java
    Réponses: 5
    Dernier message: 15/05/2013, 13h23
  3. Initialiser une classe Java via un tableau d'octets
    Par Biloute88 dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 27/07/2012, 15h43
  4. accéder à une classe JAVA via un Scripted Data Set
    Par elbrujo2323 dans le forum BIRT
    Réponses: 3
    Dernier message: 19/03/2008, 16h41

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