На странице index.xhtml, как показано ниже, у меня есть 3 командные кнопки, которые при щелчке перенаправляют на другую страницу .xhtml, содержащую данные, и, при завершении , фильтруют ее:
<ui:composition>
<h:form id="kpiForm">
<p:panel id="kpiPanel" >
<p:commandButton value="filter 1" action="/app/index" oncomplete=" $('#MyFormID\\:MyDatatableID\\:BoxID\\:1').click(); PF('wv').filter();" onclick="rc()" />
<p:commandButton value="filter 2" action="/app/index" oncomplete=" $('#MyFormID\\:MyDatatableID\\:BoxID\\:2').click(); PF('wv').filter();" onclick="rc()" />
<p:commandButton value="filter 3" action="/app/index" oncomplete=" $('#MyFormID\\:MyDatatableID\\:BoxID\\:3').click(); PF('wv').filter();" onclick="rc()" />
</p:panel>
<p:remoteCommand name="rc" actionListener="#{datatableController.clearAllFilters}" />
</h:form>
</ui:composition>
В another.xhtml есть кнопка, которая при нажатии очищает все фильтры, применяемые к датируемой таблице:
<!-- some code ommited -->
<ui:composition [...]>
<h:form id="OutsideFormID">
<p:panel id="MyPanelID" header="Some Title">
<p:commandButton value="Reset Table" onclick="PF('wv').clearFilters()" actionListener="#{datatableController.clearAllFilters}" update="MyDatatableID">
<p:resetInput target="MyDatatableID" />
</p:commandButton>
<p:dataTable id="MyDatatableID"
value="#{datatableController.items}"
rowKey="#{item.id}"
var="item"
selection="#{datatableController.selected}"
filteredValue="#{datatableController.filteredDemandas}"
widgetVar="wv">
<p:column id="MyColumnID" sortBy="#{item.status.statusName}" filterBy="#{item.status.statusName}" filterMatchMode="in" >
<f:facet name="header">
<h:outputText value="STATUS"/>
</f:facet>
<f:facet name="filter">
<p:selectCheckboxMenu id="BoxID" widgetVar="BoxWV" label="status" onchange="PF('wv').filter()">
<f:selectItems id="ComboID" value="#{datatableController.statusListCombo}" />
</p:selectCheckboxMenu>
</f:facet>
<h:outputText value="#{item.status.statusName}"/>
</p:column>
</p:dataTable>
</p:panel>
</h:form>
</ui:composition>
Когда я нажимаю кнопку filter 3 , загружается другой файл .xhtml, содержащий таблицу данных, и, при завершении , таблица данных фильтруется должным образом. Но если я нажму на другую кнопку фильтра (например, filter 2 ), ранее примененный фильтр останется активным, что приведет к нежелательной фильтрации; этот ранее примененный фильтр отключается, если я снова нажимаю на соответствующую ему кнопку фильтра.
Я пытался использовать удаленную команду для вызова метода clearAllFilters, но безуспешно.
public void clearAllFilters() {
DataTable dataTable = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent("OutsideFormID:MyDatatableID");
if (!dataTable.getFilters().isEmpty()) {
dataTable.reset();
RequestContext requestContext = RequestContext.getCurrentInstance();
requestContext.update("OutsideFormID:MyDatatableID");
}
}
Как мне вызвать метод clearAllFilters, который будет выполняться каждый раз при нажатии на любую из кнопок фильтра (в kpiForm) и, при завершении , таблица данных будет отфильтрована?
Заранее спасибо за любую помощь.