我有一个数据表,输入开关组件作为其中一列。我正在使用全局过滤器进行搜索,过滤器工作正常,但如果后备bean中没有匹配数据,则表变为空,如果从过滤器输入文本中清除搜索文本,则所有输入开关将处于禁用状态即使后端数据处于活动状态,数据表的第一页也是如此。 我试图将过滤器用于输入开关所在的列,但没有运气。 任何帮助将不胜感激。
这是我的样本xhtml
<p:dataTable id="dataTbl" var="_list"
value="#{Bean.List}" rows="10"
widgetVar="DataWidget" paginator="true"
rowKey="#{_list.lookupId}" paginatorPosition="bottom"
pageLinks="1" selection="#{Bean.Data}">
<f:facet name="header">
<p:outputPanel style="height:30px;">
<h:outputText value="Unit Data" />
<p:inputText id="globalFilter"
onkeyup="PF('DataWidget').filter()"
styleClass="placeHolder" placeholder="Enter
keyword" />
<h:outputText value="Search:"/>
</p:outputPanel>
</f:facet>
<p:ajax event="rowSelectRadio"
update="DataTbl, DataForm:growl
listener="#{DataManager.enable}" />
<p:column headerText=" "
selectionMode="single">
</p:column>
<p:column headerText="Unit "
sortBy="#{_list.Type}"
filterBy="#{_list.Type}"
filterStyle="display:none;">
<h:outputText value="#{_list.Type}" />
</p:column>
<p:column headerText="Code"
sortBy="#{_list.Code}"
filterBy="#{_list.Code}"
filterStyle="display:none;">
<h:outputText value="#{_list.code}" />
</p:column>
<p:column headerText="State"
<p:inputSwitch value="#{_list.active}" rendered="#{not _lookup.activeFlag}" onLabel="on" offLabel="off">
<p:ajax listener="#{DataManager.enable(_list.Id)}" update="lookupDataTbl"/>
</p:inputSwitch>
<p:inputSwitch value="#{_list.active}" rendered="#{not _list.active}" onLabel="on" offLabel="off">
<p:ajax listener="#{DataManager.disable(_list.Id)}" update="lookupDataTbl"/>
</p:inputSwitch>
</p:column>
</p:dataTable>
答案 0 :(得分:0)
最后我发现了一个解决方法,我使用了数据表的filteredValue属性并为其分配了一个临时列表。此临时列表的值与数据表的value属性列表相同。所以过滤器将使用此列表。