在页面加载后通过selectOneMenu的默认值过滤数据表

时间:2014-10-20 12:17:42

标签: jsf primefaces datatable

我需要按默认值过滤数据表(请参阅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>

1 个答案:

答案 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();");
}