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 :

Prendre en compte les données d'un formulaire lors du filtrage/tri sur une datatable


Sujet :

JSF Java

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut Prendre en compte les données d'un formulaire lors du filtrage/tri sur une datatable
    Bonjour,

    mon problème du jour concerne le tri et le filtrage sur une rich:extendeddatatable. La table est remplie en fonction de filtres situés au-dessus de la table. Celà fonctionne bien.
    Le problème vient du tri/filtrage sur la table : il semblerait (constaté en mode debugger) que le getter sur les données de la table soit appelé AVANT la mise à jour du modèle (ce qui donne que ma table après tri/filtrage contient toutes mes données, peu importe les valeurs de filtrage). Celà correspond a priori au comportement habituel des listeners, mais le problème là est que je n'ai (à ma connaissance) pas la main sur ce listener pour, par exemple, le reposter afin de le traiter au cours d'une phase ultérieure (et donc après la màj du modèle).

    Donc je suis embêté car je ne sais pas comment faire en sorte que le rechargement de la table lors du tri/filtrage se fasse après la mise à jour du modèle.

    Si quelqu'un a une idée...

    Un aperçu du code (simplifié.. avec peut-être des erreurs de simplification!) :
    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
    <h:form id="myForm">
     
          <!-- LES FILTRES -->  
     		 	<h:outputText value="#{bundle.filter1}" />
          <h:selectBooleanCheckbox
    	          id="selectFilter1"
    	          value="#{monBean.filter1choice}"/>
    	    <h:inputText value="#{monBean.filter1param}"/>
    	    <h:outputText value="#{bundle.filter2}" />
          <h:selectBooleanCheckbox
    	          id="selectFilter2"
    	          value="#{monBean.filter2choice}"/>  
          <h:outputText value="#{bundle.filter3}" />
          <h:selectBooleanCheckbox
    	          id="selectFilter3"
    	          value="#{monBean.filter1choice}"/>      
    	    <h:inputText value="#{monBean.filter3param}"/>
     
          <!-- LE BOUTON QUI APPLIQUE LES FILTRES -->  
          <div class="button-wrapper">
              <a4j:commandLink
                  reRender="myForm:resultList"
                  action="#{monBean.doReloadResultList}">
                  <span><h:outputText value="#{bundle.apply_filter_button}" /> </span>
              </a4j:commandLink>
          </div>       
     
          <!-- LES RESULTATS DU FILTRAGE -->  
          <rich:extendedDataTable
    	        id="resultList"
    	        value="#{monBean.listResult}"
    	        var="result"
    	        rowKeyVar="row"
    	        rows="#{monBean.nbResults}"
    	        binding="#{monBean.resultsDataTable}">
     
    	        <f:facet name="header">
    		        <h:outputText value="titre"/>
    	        </f:facet>
     
    	        <rich:column 
                    id="SelectColumn">
               		<h:selectBooleanCheckbox 
    	              onclick="someScript()"
    	              id="checkIt"
    	              value="#{result.selected}"/>
    	        </rich:column>
     
    	        <rich:column 
                    sortBy="#{result.lastname}"
    		            filterBy="#{result.lastname}"
    		            sortOrder="ASCENDING">
          				<f:facet name="header">
          				  <h:outputText id="lastname" value="#{bundle.lastame}" />
          				</f:facet>
          				<h:outputText value="#{result.lastname}" />
    	        </rich:column>
     
    	        <rich:column 
                    sortBy="#{result.firstname}"
    		            filterBy="#{result.firstname}">
          				<f:facet name="header">
          				  <h:outputText id="firstname" value="#{bundle.bo_discount_select_result_firstname}" />
          				</f:facet>
          				<h:outputText value="#{result.firstname}" />
    	        </rich:column>
     
    	        <rich:column 
                    sortBy="#{result.activity.name}"
    		            filterBy="#{result.activity.name}">
          				<f:facet name="header">
          				  <h:outputText id="activity" value="#{bundle.activity}" />
          				</f:facet>
          				<h:outputText value="#{result.activity.name}" />
    	        </rich:column>
     
    	        <rich:column 
                    sortBy="#{result.company.company}"
    		            filterBy="#{result.company.company}">
          				<f:facet name="header">
          				  <h:outputText id="company" value="#{bundle.company}" />
          				</f:facet>
          				<h:outputText value="#{result.company.company}" />
    	        </rich:column>
     
        </rich:extendedDataTable>
     
    </h:form>
    Pour le bean, il n'y a rien de sorcier, donc je ne pense pas que ce soit la peine de copier le code.
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    Finalement, il suffit parfois d'énoncer clairement une question pour la résoudre.
    La solution est venue en constatant que le getter sur les données de la table était aussi appelé une seconde fois après la mise à jour du modèle ; à ce moment là, je ne rechargeais plus la table.
    Il m'a donc suffit de détecter la mise à jour du modèle pour recharger la table lors de cette seconde fois. Celà donne :
    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
        /**
         * called after bean instantiation
         */
        @PostConstruct
        public final void initBean() {
     
            filtersHaveChanged = false;
        }
     
        /**
         * @return the list of results
         */
        public final List<Results> getListResult() {
     
            if ((listResult == null) || filtersHaveChanged) {
                filtersHaveChanged = false;
                ReloadResults();
            }
            return listResults;
        }
     
         /**
         * @param filter1choice the filter1 choice
         */
        public final void setFilter1choice(final int filter1choice) {
            this.filter1choice = filter1choice;
            filtersHaveChanged = true;
        }
    PS : merci à ceux qui ont jeté un oeil
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/05/2014, 13h12
  2. recuperer les coordonnées de la souris lors d'un appui sur une touche
    Par haraelendil dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 22/11/2007, 13h23
  3. [XHTML] Ne pas prendre en compte les balises XHTML
    Par simnitch dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 18/08/2005, 15h58
  4. [Struts] Interêt de typer les données d'un formulaire ?
    Par Gildas Huart dans le forum Struts 1
    Réponses: 9
    Dernier message: 21/04/2005, 16h39
  5. [plugin][tomcat] Comment prendre en compte les jar ?
    Par djodjo dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 08/04/2004, 19h47

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