我需要按默认值过滤数据表(请参阅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>
答案 0 :(得分:2)
过滤器功能由PF('myDTable')。filter()触发,因此您需要在页面加载时触发该事件。一种方法是使用javascript,例如:
<script type="text/javascript" target="body">
$j = jQuery;
$j(document).ready( function() {
PF('myDTable').filter();
});
</script>
<强>更新强>
另一种方法是从辅助bean执行过滤功能:
public void executeFilter() {
RequestContext rc = RequestContext.getCurrentInstance();
rc.execute("PF('myDTable').filter();");
}