Primefaces p:datatable筛选器:无法验证具有空值的组件

Primefaces p:datatable筛选器:无法验证具有空值的组件,primefaces,apache-tomee,tomee-7,Primefaces,Apache Tomee,Tomee 7,是否有一种方法可以通过单击其中的文本并将此文本设置为筛选器来筛选p:datatable列 换句话说,如果我单击会话ID,我希望datatable按单击的ID筛选此列,就像我在上面的筛选器中手动输入一样 我使用的是Primefaces 6 更新 这是我的完整数据表和建议的解决方案: <p:dataTable id="tablealltx" var="transaction" value="#{pastTxModel.txList}" paginator="true" rows="20" s

是否有一种方法可以通过单击其中的文本并将此文本设置为筛选器来筛选p:datatable列

换句话说,如果我单击会话ID,我希望datatable按单击的ID筛选此列,就像我在上面的筛选器中手动输入一样

我使用的是Primefaces 6

更新

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

<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

解决方案 从Jasper复制粘贴:


问题中的数据表未将widgetVar设置为 tablealltx,因此PF('tablealltx').filter()将失败。您可以通过以下方式进行测试: 在浏览器的JavaScript控制台中输入PF(“tablealltx”)


我可以通过将
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>
您可以用一个简单的
h:outputText
替换
p:outputLabel
,但是在这种情况下(假设您使用的是JSF 2.2+),您需要添加名称空间
xmlns:a=”http://xmlns.jcp.org/jsf/passthrough“
。现在您可以使用:

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

另见:


我可以通过将
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>
您可以用一个简单的
h:outputText
替换
p:outputLabel
,但是在这种情况下(假设您使用的是JSF 2.2+),您需要添加名称空间
xmlns:a=”http://xmlns.jcp.org/jsf/passthrough“
。现在您可以使用:

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

另见:


有一个事件。如果您可以在filter字段中获得单击的文本,我想您可以以PF('datatablewv').filter()结尾。我还没试过呢,虽然有这个活动。如果您可以在filter字段中获得单击的文本,我想您可以以PF('datatablewv').filter()结尾。我几乎没有尝试过——这会将文本放入过滤器字段,但过滤不起作用:无法使用空值验证组件:alltxform:tablealltx:myFilter.doe进行了一些谷歌搜索。这似乎是由于没有
值的输入造成的。这可能与JSF实现有关(我在Mojarra 2.2.7上)。我将更新答案(无论是否使用
值,它都适用于我)。您不能使用
h:outputtext
?这是OutputLabel的一种错误用法(滥用?),但问题来自inputText。在您的答案中,{myBean.myFilter}绑定到什么?您问题中的数据表没有将
widgetVar
设置为
tablealltx
,因此
PF('tablealltx').filter()
将失败。您可以通过在浏览器的JavaScript控制台中输入
PF('tablealltx')
来测试它。几乎就在那里-这会将文本放入筛选字段,但筛选不起作用:无法验证空值的组件:alltxform:tablealltx:myFilter。进行了一些谷歌搜索。这似乎是由于没有
值的输入造成的。这可能与JSF实现有关(我在Mojarra 2.2.7上)。我将更新答案(无论是否使用
值,它都适用于我)。您不能使用
h:outputtext
?这是OutputLabel的一种错误用法(滥用?),但问题来自inputText。在您的答案中,{myBean.myFilter}绑定到什么?您问题中的数据表没有将
widgetVar
设置为
tablealltx
,因此
PF('tablealltx').filter()
将失败。您可以通过在浏览器的JavaScript控制台中输入
PF('tablealltx')
来测试它。