【问题标题】:Using Javascript to set default filter in primefaces datatable使用 Javascript 在 primefaces 数据表中设置默认过滤器
【发布时间】:2014-11-16 19:45:20
【问题描述】:

我有一个 Primefaces 数据表,其中一列有一个过滤器下拉菜单。我想在页面加载时为过滤器设置默认值。通过使用 filterValue 并为支持 bean 中的选项设置默认值,页面加载时在菜单中选择了该值,但实际上并未过滤数据表本身。

我尝试使用以下示例添加 javascript 以强制在页面加载时使用默认过滤器,但它不起作用。

setting default value in primefaces datatable Filter

我没有经常使用 javascript,所以我的问题可能就在那里。

JSF 页面:

<h:body>
    <h:form>
        <ui:define name="header" >
            <h:outputScript name="common.js" target="body" />
        </ui:define>
    </h:form>


<p:dataTable var="dataItem" value="#{homepageBean.accounts}" 
         filteredValue="#{homepageBean.filterAccounts}" widgetVar="dataTableWidgetVar" >

        <p:column headerText="Status" id="statusCol" filterBy="status" 
                filterOptions="#{homepageBean.menu.statusOption}" 
                filterValue="#{homepageBean.defaultStatus}" >                                   
            <h:outputText value="#{dataItem.status}" />
        </p:column>             

</p:dataTable>      

</h:body

common.js 页面:

function setDefaultFilter() {
    dataTableWidgetVar.filter();   
}

homepageBean 具有适用的 getter 和 setter。我正在使用 Primefaces 4.0。

【问题讨论】:

  • 你在哪里调用 setDefaultFilter() 函数?你确定它在发射吗?

标签: javascript jsf-2 primefaces datatable


【解决方案1】:
<p:dataTable var="car" value="#{dtFilterView.cars}" widgetVar="carsTable"
                     emptyMessage="No cars found with given criteria" 
                     filteredValue="#{dtFilterView.filteredCars}">

            <f:facet name="header">
                <p:outputPanel>
                    <h:outputText value="Search all fields:" />
                    <p:inputText id="globalFilter" onkeyup="PF('carsTable').filter()" style="width:150px" placeholder="Enter keyword"/>
                </p:outputPanel>
            </f:facet>

            <p:column id="carId" filterBy="#{car.id}" headerText="Id" footerText="contains" filterMatchMode="contains">
                <h:outputText value="#{car.id}" />
            </p:column>

            <p:column filterBy="#{car.year}" headerText="Year" footerText="lte" filterMatchMode="lte">
                <f:facet name="filter">
                    <p:spinner onchange="PF('carsTable').filter()" styleClass="year-spinner">
                        <f:converter converterId="javax.faces.Integer" />
                    </p:spinner>
                </f:facet>
                <h:outputText value="#{car.year}" />
            </p:column>

            <p:column filterBy="#{car.brand}" headerText="Brand" footerText="exact" filterMatchMode="exact">
                <f:facet name="filter">
                    <p:selectOneMenu onchange="PF('carsTable').filter()" >
                        <f:selectItem itemLabel="Select One" itemValue="#{null}" noSelectionOption="true" />
                        <f:selectItems value="#{dtFilterView.brands}" />
                    </p:selectOneMenu>
                </f:facet>
                <h:outputText value="#{car.brand}" />
            </p:column>

            <p:column filterBy="#{car.color}" headerText="Color" footerText="in" filterMatchMode="in">
                <f:facet name="filter">
                    <p:selectCheckboxMenu label="Colors" onchange="PF('carsTable').filter()" panelStyle="width:125px" scrollHeight="150">
                        <f:selectItems value="#{dtFilterView.colors}" />
                    </p:selectCheckboxMenu>
                </f:facet>
                <h:outputText value="#{car.color}" />
            </p:column>

            <p:column filterBy="#{car.sold}" headerText="Status" footerText="equals" filterMatchMode="equals">
                <f:facet name="filter">
                    <p:selectOneButton onchange="PF('carsTable').filter()">
                        <f:converter converterId="javax.faces.Boolean" />
                        <f:selectItem itemLabel="All" itemValue="" />
                        <f:selectItem itemLabel="Sold" itemValue="true" />
                        <f:selectItem itemLabel="Sale" itemValue="false" />
                    </p:selectOneButton>
                </f:facet>
                <h:outputText value="#{car.sold ? 'Sold': 'Sale'}" />
            </p:column>

            <p:column filterBy="#{car.price}" headerText="Price" footerText="custom (min)" filterFunction="#{dtFilterView.filterByPrice}">
                <h:outputText value="#{car.price}">
                    <f:convertNumber currencySymbol="$" type="currency"/>
                </h:outputText>
            </p:column>
        </p:dataTable>
    </h:form>
    <script>
        jQuery(document).ready(function() {
            jQuery('input[id*="globalFilter"]').val('Orange');
            PF('carsTable').filter()
          });
    </script>

这是我的一组代码,在 primefaces 5.0 中演示了默认过滤器数据表。 原始代码出现在primefaces demo datatable filter。开发代码和原始代码之间的区别只是 jquery 部分。如果您使用 Primefaces 4.0 或更新版本 (5.0),则必须使用 PF('dataTableWidgetVar').filter() 而不是 dataTableWidgetVar.filter()

<script>
        jQuery(document).ready(function() {
            jQuery('input[id*="globalFilter"]').val('Orange');
            PF('carsTable').filter()
          });
    </script>

【讨论】:

  • 不与我合作它给出了无法读取未定义的属性“过滤器”
猜你喜欢
  • 2013-03-05
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多