filter函数由PF('myDTable').filter()触发,因此您需要在页面加载时触发该事件。一种方法是使用javascript,例如:
加载页面后,我需要用默认值过滤数据表(请参阅selectOneMenu'chkNot',在这种情况下为false)。。
当前情况:筛选值被选中,但数据表没有被筛选。如果我更改值,那么它运行良好
<ui:composition template="templates/layout.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:components="http://java.sun.com/jsf/composite/components"
xmlns:p="http://primefaces.org/ui" >
<ui:define name="title">Test Page</ui:define>
<ui:define name="content">
<h:form id="tranForm">
<p:dataTable value="#{myBean.ordersAll}" var="order"
id="myDTable" widgetVar="myDTable"
filteredValue="#{myBean.ordersAllFiltered}">
<p:column filterBy="#{order.selected}" filterMatchMode="exact" headerText="Filter">
<f:facet name="filter">
<p:selectOneMenu id="chkNot" widgetVar="chkNot"
value="#{false}"
onchange="PF('myDTable').filter()" >
<f:selectItem itemLabel="All" itemValue="#{null}" noSelectionOption="true" />
<f:selectItem itemLabel="Yes" itemValue="#{true}" />
<f:selectItem itemLabel="No" itemValue="#{false}" />
</p:selectOneMenu>
</f:facet>
<h:outputText value="#{order.selected}"/>
</p:column>
</p:dataTable>
</h:form>
</ui:define>
</ui:composition>
<script type="text/javascript" target="body">
$j = jQuery;
$j(document).ready( function() {
PF('myDTable').filter();
});
</script>
更新:
另一种方法是从backingbean执行过滤函数:
public void executeFilter() {
RequestContext rc = RequestContext.getCurrentInstance();
rc.execute("PF('myDTable').filter();");
}