Я использую JSF 2.2, Primefaces 6.0 и CDI. У меня есть datatable
, в котором реализована ленивая загрузка (datatable
загружает данные из базы данных). Каждый столбец имеет поле фильтра.
Один из столбцов должен иметь поле фильтра readonly
(я сохраняю значение для этого фильтра в некоторой переменной перед отображением datatable
). Итак, как я уже писал, это поле фильтра должно быть readonly
(не редактируемое) и фильтр должен брать значение из этого поля в фильтрацию. Как реализовать эту функцию?
Я попытался добавить компонент inputtext
и установить атрибут readonly
:
<p:dataTable id="dataTableOfDataStore" var="obj" widgetVar="dataTableOfDataStoreVar"
value="#{formVisualizationController.dataTableLazy}"
lazy="true"
filteredValue="#{formVisualizationController.filteredDataTable}"
filterDelay="2000"
<!-- other attributes -->
>
<!-- other columns -->
<p:column headerText="Source IP" sortBy="#{obj.sip}"
filterBy="#{obj.sip}" filterMatchMode="contains">
<f:facet name="filter">
<p:inputText readonly="true" onchange="PF('dataTableOfDataStoreVar').filter()"
value="#{formVisualizationController.selectedSourceIPFieldOfFiltr.ip}"
style="width: 100%; background-color: #0088cc; color: #ffffff;"/>
</f:facet>
<h:outputText value="#{obj.sip}" />
</p:column>
<!-- other columns -->
</p:dataTable>
К сожалению, это не работает. Когда я удаляю атрибут readonly
, он работает, но тогда поле фильтра также можно редактировать.
Конечно, я могу добиться этого, вручную передав это значение в запрос к базе данных, а затем удалив фильтр из столбца и сохранив компонент inputtext
со значением (и с атрибутом readonly
), но, возможно, вы знаете какой-то другой способ добиться этого. .
load
и поместил свое значение (для столбцаSource IP
) в параметрfilters
методаload
. Кажется, это лучшая идея. Спасибо! Я также добавил ответ, который включает шаги, которые я сделал. 12.07.2016