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:
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.