Primefaces p:dataTable 过滤器不适用于 p:columns
Primefaces p:dataTable filter not working with p:columns
我们的项目使用 JSF 2.2 primeface 5.1。我使用以下代码在我的 JSF 页面中显示数据表,我根据动态列的类型为动态过滤器添加了 <f:facet name="filter">
。但是当我在每列的标题或 select 下拉列表中输入条件时,数据表没有过滤。
如果我删除 <f:facet name="filter">
部分。虽然过滤器类型不会动态变化(它将始终是输入文本),但过滤有效,数据表将根据输入的条件进行过滤。任何想法将不胜感激。
<p:dataTable id="myTable" var="model" value="#{myBackingBean.dynaModels}" widgetVar="tableWidget" editable="true" styleClass="ui-dyna-table"
rows="15" paginator="true" resizableColumns="true" tableStyle="width:auto" emptyMessage="">
<p:columns value="#{myBackingBean.myProperties}" var="myProperty" columnIndexVar="colIndex" styleClass="ui-editable-column" width="50px" filterBy="#{model.dyanModel[myProperty.propertyKey].value}" sortBy="#{model.dyanModel[myProperty.propertyKey].value}">
<f:facet name="header" >
<h:outputText value="#{myProperty.descr}" />
</f:facet>
<f:facet name="filter" >
<p:selectOneMenu rendered="#{myProperty.componentType.value eq 'S1'}" style="width:100px" onchange="PF('tableWidget').filter()" >
<f:selectItem itemValue="" noSelectionOption="true"/>
<f:selectItems value="#{myProperty.lov}" />
</p:selectOneMenu>
<p:inputText rendered="#{myProperty.componentType.value eq 'TXT'}" style="width:80px" onchange="PF('tableWidget').filter()" />
<p:calendar rendered="#{myProperty.componentType.value eq 'DT'}" showOn="button" pattern="dd-MMM-yyyy" onchange="PF('tableWidget').filter()" >
</p:calendar>
</f:facet>
<h:outputText value="#{model.dyanModel[myProperty.propertyKey].value}" />
</p:columns>
经过一番搜索,我发现这是一个已知的 prime faces 错误。动态 p:columns 中的过滤器不起作用。我尝试通过以下变通方法更改我的 jsf,它起作用了。
<c:forEach ...>
<p:column>
</p:column>
</c:forEach>
instead of
<p:columns>
</p:columns>
我们的项目使用 JSF 2.2 primeface 5.1。我使用以下代码在我的 JSF 页面中显示数据表,我根据动态列的类型为动态过滤器添加了 <f:facet name="filter">
。但是当我在每列的标题或 select 下拉列表中输入条件时,数据表没有过滤。
如果我删除 <f:facet name="filter">
部分。虽然过滤器类型不会动态变化(它将始终是输入文本),但过滤有效,数据表将根据输入的条件进行过滤。任何想法将不胜感激。
<p:dataTable id="myTable" var="model" value="#{myBackingBean.dynaModels}" widgetVar="tableWidget" editable="true" styleClass="ui-dyna-table"
rows="15" paginator="true" resizableColumns="true" tableStyle="width:auto" emptyMessage="">
<p:columns value="#{myBackingBean.myProperties}" var="myProperty" columnIndexVar="colIndex" styleClass="ui-editable-column" width="50px" filterBy="#{model.dyanModel[myProperty.propertyKey].value}" sortBy="#{model.dyanModel[myProperty.propertyKey].value}">
<f:facet name="header" >
<h:outputText value="#{myProperty.descr}" />
</f:facet>
<f:facet name="filter" >
<p:selectOneMenu rendered="#{myProperty.componentType.value eq 'S1'}" style="width:100px" onchange="PF('tableWidget').filter()" >
<f:selectItem itemValue="" noSelectionOption="true"/>
<f:selectItems value="#{myProperty.lov}" />
</p:selectOneMenu>
<p:inputText rendered="#{myProperty.componentType.value eq 'TXT'}" style="width:80px" onchange="PF('tableWidget').filter()" />
<p:calendar rendered="#{myProperty.componentType.value eq 'DT'}" showOn="button" pattern="dd-MMM-yyyy" onchange="PF('tableWidget').filter()" >
</p:calendar>
</f:facet>
<h:outputText value="#{model.dyanModel[myProperty.propertyKey].value}" />
</p:columns>
经过一番搜索,我发现这是一个已知的 prime faces 错误。动态 p:columns 中的过滤器不起作用。我尝试通过以下变通方法更改我的 jsf,它起作用了。
<c:forEach ...>
<p:column>
</p:column>
</c:forEach>
instead of
<p:columns>
</p:columns>