2016-09-29 53 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