是否可以将全局过滤器放在p:dataTable之外?

时间:2012-01-08 09:38:16

标签: jsf-2 primefaces

我需要将p:dataTable的全局过滤器放在表本身之外,

我想把它放在数据表所在的表格之外,但是为了开始将过滤器放在数据表FORM中,但在数据表本身之外就足够了

即使我将过滤器放在数据表FORM中但在数据表本身之外,它也会停止工作(它在p:dataTable本身内100%工作)

以下是过滤器本身的定义

<p:inputText id="globalFilter" onkeyup="myTableNameTable.filter()" style="width:150px;"/>  

2 个答案:

答案 0 :(得分:7)

我使用“代理”按钮解决了这个问题。

我设置h:panelGroup围绕<p:inputText id="globalFilter">的{​​{1}}样式,如下所示:

display:none

然后在完全其他地方添加输入文本

<h:panelGroup style="display:none">  

绑定一个使用jQuery <h:panelGroup id="myFilter" > <h:inputText id="myFilter_text" /> </h:panelGroup> 函数的JS函数(在较旧的jQuery版本中,你可以使用on()),如下所示:

delegete()

使用 function searchKeyPressedHandler() { $(document).on("keyup", "#myFilter input", function (event) { var searchValue = document .getElementById('myFilter_text').value; $("#myTableId\\:globalFilter").val(searchValue); $("#myTableId\\:globalFilter").trigger('keyup') }); } 和on(),因为我正在使用额外的jQuery 1.7.1库,否则我必须使用$()而不是

jQuery()

我会用

$(document).on("keyup", "#myFilter input",

(刚刚切换了第一个和第二个参数)

就是这样,我可以随意将过滤器输入放在任何地方。

答案 1 :(得分:1)

丹尼尔,很好的答案。我今天仍在使用这个。这是一种更通用的方法,其中 ID 仅输入一次,并且 tableId 已被删除,以便可以轻松重复使用。

function wireProxyFilter() {
    var proxyFilterJq = $("input[id$='globalFilterProxy']");
    var filterJq = $("input[id$='globalFilter']");
    
    proxyFilterJq.keyup( function () {
        var searchValue = proxyFilterJq.val();
        filterJq.val(searchValue);
        filterJq.trigger('keyup');
    });
}