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 :

Actions et ActionListeners d'un bouton


Sujet :

JSF Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Par défaut Actions et ActionListeners d'un bouton
    je fais pas un topic pour ça
    Edit romaintaz: Bah moi si parce qu'il s'agit d'un autre sujet

    J'ai honte mais je n'arrive plus à appeler une méthode de mon Bean en cliquant sur un pitit bouton

    quelqu'un peut me rappeler la syntaxe ?

  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
    Deux façons de faire : avec une action (pratique quand il s'agit de faire une redirection vers une autre page) ou avec un actionListener...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h:commandButton action="#{myBean.uneAction}" .../>
    <h:commandButton actionListener="#{myBean.autreAction}" .../>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public String uneAction() {
        // Code ...
        return idNavigationRuleDeMaNouvellePage;
    }
     
    public void autreAction(ActionEvent evt) {
        // Code ...
    }
    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 averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Par défaut
    ok moi je vais utiliser t'as deuxieme méthode, je n'ai pas de parametre à retourner, en faite la fonction appeler génere juste un document PDF ( jasper report )

    par contre je ne comprend pas bien ceci :ActionEvent evt
    enfin si je comprend, mais comment s'est il ce qu'est evt ??

    edit: en fait j'avais failli faire comme ça, mais dans ma JSF apres avoir tapper
    #{monBean. , il ne me proposait pas ma fonction donc j'en ai déduit qu'il ne la voyait pas

  4. #4
    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
    Un ActionListener est un listener sur une action, en l'occurrence le clic sur le bouton.
    Cela génère donc un événement, un ActionEvent.
    JSF va donc passer, par défaut, cet objet événement à la méthode liée à l'actionListener (dans mon exemple, myBean.autreAction).
    Donc c'est automatique, tu n'as rien à faire...
    Ce principe se retrouve dans les événements Swing d'ailleurs.

    A noter que pour une action, si le String retourné est vide ou null, alors la navigation n'est pas lancée (i.e. l'utilisateur reste sur la même page).
    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

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Par défaut
    ouai mais ce que je veux dire c'est que si j'ai plusieur actionlistner sur une page ( plusieur bouton on va dire )

    mes fonction vont si je met partout le parametre evt ??
    Enfin d'apres ce que tu viens de m'expliquer oui mais c'est ce qui me turlupinais

  6. #6
    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
    Si tu as plusieurs boutons, je te conseille de faire plusieurs méthodes dans ton bean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h:commandButton value="un" actionListener="#{myBean.doIt}" .../>
    <h:commandButton value="deux" actionListener="#{myBean.justDoIt}" .../>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void doIt(ActionEvent evt) {
        ... // Code pour le bouton "un"
    }
     
    public void justDoIt(ActionEvent evt) {
        ... // Code pour le bouton "deux"
    }
    A vrai dire, tu pourrais ne faire qu'une seule méthode, et vérifier la source de l'événement et faire en fonction du bouton. Un peu comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h:commandButton id="un" value="un" actionListener="#{myBean.doIt}" .../>
    <h:commandButton id="deux" value="deux" actionListener="#{myBean.doIt}" .../>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void doIt(ActionEvent evt) {
         HtmlCommandButton button = (HtmlCommandButton) evt.getSource();
        if (button.getId().equals("un")) {
            // Code pour bouton "un"...
        } else if (button.getId().equals("deux")) {
            // Code pour bouton "deux"...
        }
    }
    Mais je trouve ça crade, très confusant aussi.

    Si tu as 2 boutons sur ta page mais qui font la même chose (par exemple si tu mets un bouton en haut de page mais que tu veux le répéter en bas de page aussi, pour éviter à l'utilisateur de scroller), rien ne t'empêche que ces 2 boutons pointent sur la même méthode de ton bean.

    Est-ce plus clair ?
    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

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Par défaut
    ouai j'avais compri, c'étais juste pour le paramètre actionEvent.

    Autre probleme, comment appeler une servlet avec un bouton ???

  8. #8
    Membre expérimenté
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Par défaut
    tu fais une redirection

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Par défaut
    ben apparament ya pas moyen avec un bouton
    j'ai du passer par un commandLink

  10. #10
    Membre chevronné Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Par défaut
    Parceque ton command link est en immediate = true par défault contrairement à ton bouton. Tu as un problème dans ton cycle de vie jsf, tu as un problème de validation ou de binding.

    Pour en savoir plus ajoutes un h:messages ou utilises le composant facestrace.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Par défaut
    le probleme est plus complexe que ça voila ce que je fais ac mon commanLink :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <h:outputLink value="GenererPDF" target="_blank">
    					<f:param name="da" value="#{TestBean.dateAbbatage}" />
    					<f:param name="ip" value="#{TestBean.indper}" />
    					<f:param name="nb" value="#{TestBean.nbAbattage}" />
    					<f:param name="min" value="#{TestBean.poidMin}" />
    					<f:param name="max" value="#{TestBean.poidMax}" />
    					<f:param name="moy" value="#{TestBean.poidMoyen}" />
    					<h:outputText value="Imprimer"/>
    				</h:outputLink>
    GenerePDF est ma servlet qui affiche mon PDF dans une nouvelle page.

    Etant donné que j'utilise IceFaces, je suis pas mal limité. Impossible de passer par les navigationRules.

    servlet :
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
     
    package fr.cmre;
     
    import java.io.IOException;
    import java.io.OutputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.HashMap;
    import java.util.Map;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import net.sf.jasperreports.engine.JRException;
    import net.sf.jasperreports.engine.JasperCompileManager;
    import net.sf.jasperreports.engine.JasperReport;
    import net.sf.jasperreports.engine.JasperRunManager;
    import net.sf.jasperreports.engine.design.JasperDesign;
    import net.sf.jasperreports.engine.xml.JRXmlLoader;
     
    /**
     * Servlet implementation class for Servlet: GenererPDF
     * 
     */
    public class GenererPDF extends javax.servlet.http.HttpServlet implements
    		javax.servlet.Servlet {
    	static final long serialVersionUID = 1L;
     
    	/*
    	 * (non-Java-doc)
    	 * 
    	 * @see javax.servlet.http.HttpServlet#HttpServlet()
    	 */
    	public GenererPDF() {
    		super();
    	}
     
    	/*
    	 * (non-Java-doc)
    	 * 
    	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request,
    	 *      HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request,
    			HttpServletResponse response) throws ServletException, IOException {
    		doPost(request, response);
    	}
     
    	/*
    	 * (non-Java-doc)
    	 * 
    	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,
    	 *      HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request,
    			HttpServletResponse response) throws ServletException, IOException {
     
    		byte[] pdf;
    		String dateAbbatage = null;
    		String indper = null;
    		String nbovin = null;
    		String min = null;
    		String max = null;
    		String moy = null;
     
    		dateAbbatage = request.getParameter("da");
    		indper = request.getParameter("ip");
    		nbovin = request.getParameter("nb");
    		min = request.getParameter("min");
    		max = request.getParameter("max");
    		moy = request.getParameter("moy");
     
    		pdf = generePDF(dateAbbatage, indper, nbovin, min, max, moy);
    		response.setContentType("application/pdf");
    		response.setHeader("Content-disposition", "inline");
    		response.setContentLength(pdf.length);
    		response.setHeader("Cache-Control", "cache, must-revalidate");
    		response.setHeader("Pragma", "public");
     
    		try {
    			OutputStream out = response.getOutputStream();
    			out.write(pdf);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
     
    	public byte[] generePDF(String uneDate, String unIndicePer, String unNb,
    			String unMin, String unMax, String uneMoy) { // -
    		String url = "jdbc:oracle:thin:@obelix:1521:dweb";
    		String login = "ovitelweb";
    		String password = "bewletivo";
    		byte[] pdf = null;
    		Connection connection = null;
    		try {
    			// - Connexion à la base
    			connection = DriverManager.getConnection(url, login, password);
     
    			// - Chargement et compilation du rapport
    			JasperDesign jasperDesign = JRXmlLoader.load("c:\\classic.jrxml");
    			JasperReport jasperReport = JasperCompileManager
    					.compileReport(jasperDesign);
     
    			// - Paramètres à envoyer au rapport
    			Map<String, Integer> parameters = new HashMap<String, Integer>();
    			Map<String, String> parametersDate = new HashMap<String, String>();
    			Map<String, String> parametersString = new HashMap<String, String>();
    			parameters.put("idUtil", Integer.parseInt(unIndicePer));
    			parametersDate.put("date", uneDate);
    			parameters.put("nbovin", Integer.parseInt(unNb));
    			parameters.put("min", Integer.parseInt(unMin));
    			parameters.put("max", Integer.parseInt(unMax));
    			parametersString.put("moy", uneMoy);
     
    			// - Execution du rapport
    			pdf = JasperRunManager.runReportToPdf(jasperReport, parameters,
    					connection);
    			return (pdf);
     
    		} catch (JRException e) {
     
    			e.printStackTrace();
    		} catch (SQLException e) {
     
    			e.printStackTrace();
    		} catch (Exception e) {
     
    			e.printStackTrace();
    		} finally {
    			try {
    				connection.close();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		return (pdf);
     
    	}
    }
    Enfin bon ça marche pour l'instant c'est l'essentiel

Discussions similaires

  1. JSF et problème avec actionListener d'un bouton
    Par bard123 dans le forum JSF
    Réponses: 14
    Dernier message: 29/04/2008, 16h22
  2. ActionListener sur un bouton d'une Jtable
    Par tchoukapi dans le forum Composants
    Réponses: 2
    Dernier message: 10/07/2007, 17h25
  3. action de formulaire selon le bouton radio?
    Par anis_el_madani dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/05/2007, 10h00
  4. Binding?, action vs actionListener?
    Par trimok dans le forum JSF
    Réponses: 6
    Dernier message: 25/01/2007, 22h40
  5. action au passage sur un bouton
    Par jasonite dans le forum Flash
    Réponses: 4
    Dernier message: 07/07/2006, 17h38

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