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 :

Récupérer la valeur d'un SelectOneMenu Dynamique


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Par défaut Récupérer la valeur d'un SelectOneMenu Dynamique
    Bonjour,

    j'ai crée dynamiquement 3 objects :
    - une liste deroulante( SelectOneMenu )
    - un champ text ( InputText )
    - un boutton ( CommandButton )

    et je les associé à un GridPanel pour les afficher sur ma page jsp

    Code :

    => page.jsp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <h:panelGrid binding="#{option.gridPanel1}" border="0" rules="all" title="valider">  
     
    		      		  	    <h:commandButton value=" + Requete " action="#{option.requeteplus}" />
    		   </h:panelGrid>
    => myBeans :

    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
     
    public String requeteplus() {
     
    		if (gridPanel1 == null) {
    			gridPanel1 = new HtmlPanelGrid();
    		}
     
    		HtmlSelectOneMenu temp = new HtmlSelectOneMenu();
    		HtmlCommandButton button = new HtmlCommandButton();   
    		HtmlInputText tf = new HtmlInputText();
     
    		button.setValue("afficher valeur");
     
    		list = new UISelectItems();
    //colonnes est une liste de type : List<SelectItem>  		
                    list.setValue(colonnes);
    		temp.getChildren().add(list);
     
    		int index = gridPanel1.getChildren().size();
    		gridPanel1.getChildren().add(index, temp);
    		gridPanel1.getChildren().add(index, button);
    		gridPanel1.getChildren().add(index, tf);
     
    		return "";
    	}
    j'arrive à visualiser les composants correctement
    ma question est : L'orsque je selectionne un element de la liste(SelectOneMenu) et je valide par le boutton, comment faire pour recuperer la valeur selectionnée et l'afficher sur le champ text ?

    merci d'avance ...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Par défaut
    toujours pas de reponse !!!!!

    j'ai cherché mais j'ai rien trouvé ...

    SVP j'ai vraiment besoin de votre aide

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    1) pourquoi utiliser un binding plutot que de mettre directement le composant dans le template? C'est pas l'idée de JSF de créer et initialiser les composant dans tes beans
    2) Ce n'est pas comme ça qu'on instancie des composant JSF, il faut passer par les factories ad-hoc qui les initialiseraont. Elle se trouvent dans Application:
    Application.createComponent(....)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Par défaut
    merci pr ta reponse et désolé parce que je suis débutant en jsf, c'est pour cela j'ignore encore des choses la dont

    j'ai modifié mon code ( j'ai crée un bouton/ liste deroulante/ champ Text et un Gridpanel ) :
    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
     
    public String requeteplus() {
     
    		javax.faces.application.Application application =  FacesContext.getCurrentInstance().getApplication();   
     
    		if (gridPanel1 == null) {
    			gridPanel1 = (HtmlPanelGrid) application.createComponent(HtmlPanelGrid.COMPONENT_TYPE);
    		}
     
    			HtmlSelectOneMenu temp = (HtmlSelectOneMenu) application.createComponent(HtmlSelectOneMenu.COMPONENT_TYPE);
    		HtmlInputText text = (HtmlInputText) application.createComponent(HtmlInputText.COMPONENT_TYPE);
    		HtmlCommandButton button = (HtmlCommandButton) application.createComponent(HtmlCommandButton.COMPONENT_TYPE);
     
    		button.setId("ok");   
     
    		button.setValue(" Click!! ");
     
    		list = new UISelectItems();
    		list.setValue(colonnes);
    		temp.getChildren().add(list);
     
    		int index = gridPanel1.getChildren().size();
    		gridPanel1.getChildren().add(index, temp);
    		gridPanel1.getChildren().add(index, button);
    		gridPanel1.getChildren().add(index, text);
     
    		return "";
    	}
    maintenant l'orsque je tape sur le bouton, je veux qu'un String s'affiche sur le champ Text, j'ai fais cela :
    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
     
    	public String requeteplus() {
     
    		javax.faces.application.Application application =  FacesContext.getCurrentInstance().getApplication();   
     
    		if (gridPanel1 == null) {
    			gridPanel1 = (HtmlPanelGrid) application.createComponent(HtmlPanelGrid.COMPONENT_TYPE);
    		}
     
    			HtmlSelectOneMenu temp = (HtmlSelectOneMenu) application.createComponent(HtmlSelectOneMenu.COMPONENT_TYPE);
    		HtmlInputText text = (HtmlInputText) application.createComponent(HtmlInputText.COMPONENT_TYPE);
    		HtmlCommandButton button = (HtmlCommandButton) application.createComponent(HtmlCommandButton.COMPONENT_TYPE);
     
    		button.setId("ok");   
     
    		javax.faces.el.MethodBinding mb = application.createMethodBinding("#{option.afficher}", new Class[] { ActionEvent.class } ); 
    		button.setActionListener( mb );
     
    		button.setValue(" Click!! ");
     
    		list = new UISelectItems();
    		list.setValue(colonnes);
    		temp.getChildren().add(list);
     
    		int index = gridPanel1.getChildren().size();
    		gridPanel1.getChildren().add(index, temp);
    		gridPanel1.getChildren().add(index, button);
    		gridPanel1.getChildren().add(index, text);
     
    		return "";
    	}
     
    	public void afficher( ActionEvent event ){
    		Object obj = event.getSource();
     
    		if(obj.equals(button)){
    			tf.setText(" Bonjour !! ");
    		}
    	}
    ** à l'execution rien ne change !!!!

    ** j'ai les Methodes "MethodBinding" / "createMethodBinding(..);" et "setActionListener(..);" barrée sur mon code !!!

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    En fait, j'arrive pas a comprendre ce que tu essaie de faire avec ton code
    Pour récupérer la valeur d'un selectonemenu, ca se fait normalement comme avec tout composant, via le value binding:

    <h:selectOneMenu value="#{monBean.maValeur}">....

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Par défaut
    ok, voila ce que je veux faire

    le code precedent c'est celui de mon Beans, et sur ma page JSP j'ai tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
    <%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
     
    			<h:panelGrid binding="#{option.gridPanel1}" columns="3" border="0" rendered="#{option.visible9}" rules="all" title="valider">  
     
    		        <!--  /////////////////////////////// -->
    		  	    <h:commandButton value=" + Requete " action="#{option.requeteplus}" />
    		   </h:panelGrid>
    comme c'est noté il y a juste le Tag de PanelGrid que je lui associer les autres composants denifient sur mon Beans(bouton/liste deroulante/champ text) à fin de les affichers sur ma page jsp ( j'ai pas besoin de créer un tag pour chaque composant parce que je vais les ajouter dynamiquement, autant de fois que je veux par un simple click sur le bouton "+ Requete")

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    c'est en général pas une bonne idée de modifier dynamiquement ton arbre JSF :/

    Il existe déjà des composant comme le datatable en base, dataList (tomahawk) et certains composants avancé (richfaces) pour gérer l'itération sur des collection.

    Tu devrais normalement avoir un Bean contenant l'action associée au bouton, la valeur sélectionnée dans la liste et la valeur de la zone de texte. Ensuite, tu devrais avoir dans ton bean principal un collection de ces beans où tu ajoute 1 à 1 des éléments. Enfin, plus qu'à itérer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class MonElement{
       private String texte; //+getter & setters
       private String liste; // + getter & setters
       public String click() {/*......*/}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class MonBean{
       private List<MonElement> elements = new ArrayList<MonElement>();
       /*+getters & setters*/
      public String ajouterUneLigne(){
         elements.add(new MonElement());
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <h:dataTable value="#{MonBean.elements}" var="element">
      <h:column>
        <h:selectOneMenu value="#{element.liste}">
          <f:selectItem ..../>
        </h:selectOneMenu>
      </h:column>
      <h:column>
        <h:inputText value="#{element.text}"/>
      </h:column>
      <h:column>
        <h:commandButton value="clic ;)" action="#{element.clic}"/>
      </h:column>
    </h:dataTable>
    <h:commandButton value="+1" action="#{monBean.ajouterUneLigne}"/>

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Par défaut
    merci mais je pense que tu m'as pas compris, je veux ajouter des composants dynamiquement (sans preciser le type du composant sur ma page jsp) et pas des elements à une liste, ça peut etre n'importe quel composant (tu peux dire que c'est une gestion des compotants jsp ajouter, supprimer ...)

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Comme je dit, en général c'est un très mauvais idée, JSF n'est pas tout à fait prévu dans cette optique.
    Maintenant, pour récupérer les valeur, c'est comme dans la page JSP/Facelets tu dois attribuer un valueBinding vers un bean à ton composant, via
    setValueBinding("value",leValueBindingEnquestion)

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Par défaut
    merci tchiz_ j'ai réussi a le faire

    mybeans
    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
     
    		javax.faces.application.Application application =  FacesContext.getCurrentInstance().getApplication();   
     
    		if (gridPanel1 == null) {
    			gridPanel1 = (HtmlPanelGrid) application.createComponent(HtmlPanelGrid.COMPONENT_TYPE);
    		}
     
    		HtmlSelectOneMenu contenuFormulaire = (HtmlSelectOneMenu) application.createComponent("javax.faces.HtmlSelectOneMenu");
    		contenuFormulaire.setId("contenu");
    		javax.faces.el.MethodBinding valueContenuConteneurChange = application.createMethodBinding("#{option.valider}",new Class[]{ValueChangeEvent.class});
    		contenuFormulaire.setValueChangeListener(valueContenuConteneurChange);
     
         	contenuFormulaire.setOnchange("submit()");
    		contenuFormulaire.setImmediate(true);
     
    		list = new UISelectItems();
    		list.setValue(colonnes);
    		contenuFormulaire.getChildren().add(list);
     
    		int index = gridPanel1.getChildren().size();
     
    		gridPanel1.getChildren().add(index, contenuFormulaire);
    fonction de retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    public void valider(ValueChangeEvent event){
     
        	HtmlSelectOneMenu valeur = (HtmlSelectOneMenu)event.getComponent();   
        	String v = (String)valeur.getValue();   
     
        	System.out.println(" Valeur SelectOneMenu : "+v);
     
        }
    et ma page JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
    <%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
     
    		<h:panelGrid binding="#{option.gridPanel1}" columns="1" border="0" rendered="#{option.visible2}" rules="all" title="valider"/>
    merciii encore une fois

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/08/2008, 09h48
  2. récupérer les valeurs d'un formulaire dynamique
    Par une_tite_question dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2008, 16h06
  3. Récupérer la valeur de champs générés dynamiquement
    Par dedeloux dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/04/2008, 22h00
  4. Réponses: 4
    Dernier message: 09/08/2007, 13h52
  5. Récupérer les valeurs des champs créés dynamiquement
    Par outlawz dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/05/2006, 16h32

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