Aru*_*run 7 datatable jsf primefaces jsf-2
我正在使用primefaces数据表在UI中显示我的数据.众所周知,我们可以在数据表本身中进行排序和过滤.但是当我在数据表排序字段中键入单个字符时,它开始搜索数据,我不想要它.我只需要在用户在字段中键入至少3个字符时才搜索数据.有可能这样做吗?如果真是这样,那么是以哪种方式?请提供您的意见.
提前致谢.
我对 Primefaces 的数据表做了一个小调查,以下是我的发现。
实际上,不需要重新编译,只需替换源代码即可。
您需要为过滤器事件注册一个新的处理程序,而不是 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>
Run Code Online (Sandbox Code Playgroud)
javascript 将是这样的:
$(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);
}
});
}
}
});
});
Run Code Online (Sandbox Code Playgroud)
注意事项:
target="body": javascript 一定不能在 中执行<head>,因为 Primefaces 在 中初始化它的小部件变量$(document).ready(),因此不能保证您的函数将在Primefaces 初始化完成后执行;<p:dataTable>。Primefaces的实现因版本而异,因此请务必检查您正在使用的版本的实现,或升级到3.5版本;keyup) 事件。| 归档时间: |
|
| 查看次数: |
2932 次 |
| 最近记录: |