Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf primefaces数据表中的排序_Jsf_Jsf 2_Primefaces_Datatable - Fatal编程技术网

Jsf primefaces数据表中的排序

Jsf primefaces数据表中的排序,jsf,jsf-2,primefaces,datatable,Jsf,Jsf 2,Primefaces,Datatable,我正在使用PrimeFacesDataTable在UI中显示我的数据。众所周知,我们可以在数据表本身中进行排序和过滤。但当我在datatable排序字段中键入单个字符时,它开始搜索数据,我不需要它。仅当用户在字段中键入至少3个字符时,我才需要搜索数据。有可能做到吗。。?如果是,以什么方式?请提供您对此的意见 提前感谢。我对Primefaces的数据表做了一个小调查,以下是我的发现 实际上,重新编译是不必要的,源javascript替换也是如此 您需要为filter事件注册一个新的处理程序,而不是

我正在使用PrimeFacesDataTable在UI中显示我的数据。众所周知,我们可以在数据表本身中进行排序和过滤。但当我在datatable排序字段中键入单个字符时,它开始搜索数据,我不需要它。仅当用户在字段中键入至少3个字符时,我才需要搜索数据。有可能做到吗。。?如果是,以什么方式?请提供您对此的意见


提前感谢。

我对Primefaces的数据表做了一个小调查,以下是我的发现

实际上,重新编译是不必要的,源javascript替换也是如此

您需要为filter事件注册一个新的处理程序,而不是Primefaces提供的处理程序

在这种情况下,将使用如下数据表:

<h:outputScript name="js/customprimefacestable.js" target="body"/>

<p:dataTable var="data" value="#{filterBean.data}" filteredValue="#{filterBean.filteredData}" widgetVar="tableWidget">
    <p:column filterBy="#{data.name}" headerText="Name" filterMatchMode="contains">
        <h:outputText value="#{data.name}" />
    </p:column>
    <p:column filterBy="#{data.value}" headerText="Value" filterMatchMode="contains">
        <h:outputText value="#{data.value}" />
    </p:column>
    ...
</p:dataTable>
$(document).ready(function() {
    tableWidget.thead.find('> tr > th.ui-filter-column > .ui-column-filter').each(function() {
        var filter = $(this);
        if(filter.is('input:text')) {
            if(tableWidget.cfg.filterEvent!="enter"){
                //unbind current handler
                filter.unbind(tableWidget.cfg.filterEvent);
                //bind new handler that accounts for conditional filtering
                filter.bind(tableWidget.cfg.filterEvent, function(c) {
                    if(filter.val().length > 3) {
                        //Primefaces 3.5 implementation
                        if(tableWidget.filterTimeout){
                            clearTimeout(tableWidget.filterTimeout);
                        }
                        tableWidget.filterTimeout=setTimeout(function(){
                            tableWidget.filter();
                            tableWidget.filterTimeout=null},
                        tableWidget.cfg.filterDelay);
                    }
                });
            }
        }
    });
});
需要注意的事项

  • target=“body”
    :不能在
    中执行javascript,因为Primefaces在
    $(document).ready()
    中初始化其小部件变量,因此不能保证函数在Primefaces初始化后执行
  • 由于筛选从列的搜索框中键入的至少4个字符开始(完成),当用户自己将文本删除到4个字符以下(未完成)时,应恢复未筛选视图
  • 上述解决方案针对Primefaces 3.5
    。Primefaces的实现因版本而异,因此请确保检查您正在使用的版本的实现,或升级到3.5版
  • 不包括使用呈现为下拉框的输入字段过滤事件的实现
  • 该表将侦听默认(
    keyup
    )事件

据我所见,您可以选择验证整个表,或者对PF数据表源进行一个小的更改并重新编译。你愿意实现哪一个?@kolossus:如果我为我的问题重写datatable源代码中的一些方法,那没关系。但是,如果PF改进了数据表版本,这不应该成为我的开销。@kolossus您能提供一个解决方案,对PF数据表源进行一些小的更改吗?