DataTable clearFilter() ne fonctionne pas correctement
J'ai un compliquer JSF qui contiennent des dataTable avec filtre dans chacune des colonnes.
Afin de s'assurer que le bouton générer récupère toutes les données d'abord, je dois supprimer tous les filtres lorsque l'utilisateur presse le bouton.
J'essaie de faire utiliser onclick mais alors je ne pouvais pas voir le blockUI j'ai aussi essayer de le compléter (ajax), mais encore il ne fonctionnait pas correctement avec tous les autres éléments (blockUI ,message).
J'ai décidé d'essayer d'effacer les filtres via un serveur de côté, mais seulement dataTable.reset() fonctionne.
Je n'ai plus d'idées sur la façon de nettoyer les filtres ???
Est cette API travaille ?
Remercie de votre aide
Grâce
<h:panelGrid columns="1" style="width: 100%">
<p:panel id="vt-panel">
<h:panelGrid columns="5" cellpadding="2" >
<h:outputText value="Start Date" />
<p:calendar id="vt-start" value="#{vtRepBean.startDate}" binding="#{startDateComponent}" maxlength="9" size="9" pattern="dd-MMM-yy" title="dd-MMM-yy" required="true" maxdate="#{vtRepBean.endDate}">
<p:ajax event="dateSelect" listener="#{vtRepBean.handleStartDateSelect}" update=":mainForm:vt-end"/>
</p:calendar>
<h:outputText value="End Date" />
<p:calendar id="vt-end" value="#{vtRepBean.endDate}" maxlength="9" size="9" pattern="dd-MMM-yy" title="dd-MMM-yy" required="true" mindate="#{vtRepBean.startDate}">
<p:ajax event="dateSelect" listener="#{vtRepBean.handleEndDateSelect}" update=":mainForm:vt-start"/>
</p:calendar>
<p:commandButton
id="genVtBtn"
value="Generate"
actionListener="#{vtRepBean.handleVTGenerateButton}"
update=":mainForm:vt-panel,:mainForm:vt-panel-table">
</p:commandButton>
</h:panelGrid>
</p:panel>
</h:panelGrid>
<p:growl id="vt_message" showDetail="true" autoUpdate="true"/>
<h:panelGroup id="vt-panel-table">
<p:dataTable id="vtDataTable"
widgetVar="vtWidget"
var="reportObject"
value="#{vtRepBean.reportObjectsList}"
rendered="#{vtRepBean.renderVTReport}"
filteredValue="#{vtRepBean.filteredVTList}"
paginator="true"
paginatorPosition="bottom"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
rowsPerPageTemplate="50,100,200"
rows="50"
style="width: 100%">
<p:columnGroup type="header">
<p:row>
<p:column colspan="5" headerText="VT request"/>
<p:column colspan="1" headerText="Dis" />
</p:row>
<p:row>
<p:column headerText="CREATE DATE" sortBy="#{reportObject.log.createDate}" filterBy="#{reportObject.log.createDate}" filterMatchMode="contains"/>
<p:column headerText="IP" sortBy="#{reportObject.log.ip}" filterBy="#{reportObject.log.ip}" filterMatchMode="contains"/>
</p:row>
</p:columnGroup>
<p:column >
<h:outputText value="#{reportObject.log.createDate}"/>
</p:column>
<p:column >
<h:outputText value="#{reportObject.log.ip}"/>
</p:column>
</p:dataTable>
<p:commandLink rendered="#{vtRepBean.renderVTReport}" ajax="false" onclick="PrimeFaces.monitorDownload(showStatus, hideStatus)">
<p:graphicImage value="resources/images/excel.png" title="excel" style="border-color: white"/>
<p:dataExporter id="xlsReport"
type="xls"
target="vtDataTable"
fileName="VTReport"
postProcessor="#{vtRepBean.postProcessXLS}"/>
</p:commandLink>
</h:panelGroup>
<p:blockUI widgetVar="blockVTPanel" trigger="genvtBtn" block="vt-panel">
<div class="disable-scroll">
<p:graphicImage value="resources/images/ajax-loader.gif"/>
</div>
</p:blockUI>
DataTable dataTable = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent("mainForm:vtDecomDataTable");
if (!dataTable.getFilters().isEmpty()) {
logger.info("dataTable.getFilters().isEmpty() :" + dataTable.getFilters().isEmpty());
dataTable.getFilters().clear();//not working
dataTable.getFilteredValue().clear();//not working
dataTable.setFilteredValue(null);//not working
dataTable.setFilters(null);//not working
dataTable.setFilterMetadata(null);//not working
dataTable.reset();//working
RequestContext requestContext = RequestContext.getCurrentInstance();
requestContext.update("mainForm:vtDecomDataTable");
}
- Où est
vtDecomDataTable
dans votre<p:dataTable>
- Désolé faute de frappe erreur, Il doit être “requestContext.mise à jour("mainForm:vtDataTable")”
- Même problème ici, pas de réponse pour ce génie gars ?
- Avez-vous essayé de vider
filteredVTList
et ensuite mettre à jour la table de données ? - public void resetFilterDatatable( {filteredVTList = null;} fonctionne pour le datatable, mais le filtre d'entrée de colonne n'est pas effacé, c'est le problème.
Vous devez vous connecter pour publier un commentaire.
Pour effacer toutes les entrées du filtre que vous pouvez le faire en javascript:
vtWidget
est le widgetVar de la datatable.Fondamentalement
clearFilters()
va vider les champs pour vous et appelezfilter()
, et le filtre de fonction de mise à jour de votre datatable, qui à son tour va vider la liste filtrée.Note: Ceci ne fonctionne que si les filtres ont été
inputText
. Si vous avez des composants personnalisés, alors vous devriez mettre en œuvre votre propre sur la base des composants que vous avez.Parfois, si vous avez des composants personnalisés, vous avez besoin de vider la liste filtrée manuellement, comme vous l'avez fait dans les commentaires!
PF('carsTable').clearFilters()
...C'est comment j'ai résolu mon problème.
L'espoir de son aide.
Pour la compensation des filtres personnalisés, vous pouvez utiliser primefaces resetInput, avec clearFilters() discuté dans d'autres réponses, et une coutume actionListener méthode. Voir des extraits de code ci-dessous:
Controller.java
J'espère que cela aide ceux qui cherchent à effacer les filtres personnalisés.
:
en face de votre id dans le code Java que vous avez à faire avec EL code? De sorte que la chaîne résultante est":form:dataTable"
. De Plus, si vous utilisezp:page id="foo"
vous pouvez également ajouter que pour l'id:":foo:form:dataTable"
.requestContext.update
sont toujours considérée comme absolue.Pour Primefaces 7 et ci-dessus, utilisez la commande suivante:
}