2016-09-29 48 views
0

有没有办法通过点击里面的文本并使该文本成为过滤器来过滤p:datatable列?p:datatable过滤器:无法验证具有空值的组件

换句话说,如果我点击一个会话ID,我希望数据表能够通过点击的ID来过滤这个列,就像我在上面的过滤器中手动输入它一样?

enter image description here

我使用Primefaces 6

UPDATE

这是我的完整的数据表与建议的解决方案:

<p:dataTable id="tablealltx" var="transaction" value="#{pastTxModel.txList}" paginator="true" rows="20" sortBy="#{transaction.createdDate}" sortOrder="descending" resizableColumns="true">    

    <p:column filterBy="#{transaction.session}" filterMatchMode="contains"> 

     <f:facet name="filter"> 
      <p:inputText id="myFilter" value="#{transactionXmlController.currentFilter}" onchange="PF('alltxform').filter()" /> 
     </f:facet> 

     <p:outputLabel value="#{transaction.session}" ondblclick="document.getElementById('alltxform:tablealltx:myFilter').value = this.innerText;PF('tablealltx').filter()" >   
    </p:column> 
</p:dataTable> 

当我双击了会议,该值将输入到过滤器文本框中,但过滤本身不会工作。什么都没发生。

我使用TomEE 7.0.1

解决方案 从复制粘贴碧玉:

在你的问题没有widgetVar数据表设置为 tablealltx,所以PF( 'tablealltx')。filter()会失败。您可以在浏览器的JavaScript控制台中通过输入PF('tablealltx') 来测试它。

+0

有事件。如果你可以在filter-field中得到点击的文本,我想你可以用PF('datatablewv').filter()结束。我还没有尝试,虽然 –

回答

2

我能够通过设置widgetVar="myTable"到数据表中,使用自定义过滤器字段来实现这一点,与p:outputLabel更换电池内容物(其具有ondblclick)和JavaScript它一起:

<p:column headerText="Session" filterBy="#{transaction.session}" ...> 
    <f:facet name="filter"> 
     <p:inputText id="myFilter" 
        value="#{myBean.myFilter}" 
        onchange="PF('myTable').filter()"/> 
    </f:facet> 
    <p:outputLabel value="#{transaction.session}" 
        ondblclick="document.getElementById('myForm:myTable:myFilter').value = this.innerText;PF('myTable').filter()"/> 
</p:column> 

为了更好的可读性,这里的ondblclick

var filterId = 'myForm:myTable:myFilter'; 
document.getElementById(filterId).value = this.innerText; 
PF('myTable').filter(); 

你可以用一个简单的替换,但在这种情况下(假设您使用的是JSF 2.2+),则需要添加名称空间xmlns:a="http://xmlns.jcp.org/jsf/passthrough"。现在你可以使用:

<h:outputText value="#{transaction.session}" 
       a:ondblclick="..."/> 

参见:

+0

几乎那里 - 这将文本放入过滤器字段,但过滤不起作用:无法验证具有空值的组件:alltxform:tablealltx:myFilter。 – Tim

+0

做了一些Google搜索。似乎这是由于没有“价值”的输入。这可能与JSF实现相关(我在Mojarra 2.2.7上)。我会更新答案(无论有没有“价值”,它都适用于我)。 –

+0

你不能使用'h:outputtext'吗?这是一种错误的用法(滥用?)outputLabel – Kukeltje