2016-09-29 6 views
0

Есть ли способ фильтрации столбца p: datatable, щелкнув по тексту внутри и сделав этот текст фильтром?p: datatable filter: не удается проверить компонент с пустым значением

Другими словами, если я нажимаю на идентификатор сеанса, мне бы хотелось, чтобы datatable отфильтровывал этот столбец с помощью идентификатора щелчка, как если бы я ввел его вручную в фильтр выше?

enter image description here

Я использую Primefaces 6

UPDATE

Это мой полная Datatable с предлагаемым решением:

<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

Решение Copy Paste из Jasper:

В таблице данных в вашем вопросе не имеет widgetVar установлен tablealltx, поэтому PF ('tablealltx'). Фильтр() завершит сбой. Вы можете проверить его на , вводя PF ('tablealltx') в консоли JavaScript вашего браузера.

+0

Существует событие <р: Ajax события = "rowDblselect">. Если вы можете получить щелкнутый текст в поле фильтра, я думаю, вы можете завершить 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(); 

Вы могли бы заменить p:outputLabel с простым h:outputText, но в этом случае (если вы используете JSF 2.2+) вам нужно добавить пространство имен xmlns:a="http://xmlns.jcp.org/jsf/passthrough". Теперь вы можете использовать:

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

Смотрите также:

+0

Практически там - это помещает текст в поле фильтра, но фильтрация не работает: не удается проверить компонент с пустым значением: alltxform: tablealltx: myFilter. – Tim

+0

Был ли какой-то поисковик. Кажется, это связано с вводом без 'value'. Вероятно, это связано с реализацией JSF (я на Mojarra 2.2.7). Я обновлю ответ (он работает для меня как с, так и без 'value'). –

+0

Не можете ли вы использовать 'h: outputtext'? Это неправильное использование (злоупотребление?) OutputLabel – Kukeltje