我正在尝试在我的jsf页面上的数据表上实现全局过滤器。 输入文本过滤器可以正常使用以下代码:
<p:inputText id="globalFilter" onkeyup="examTable.filter();" style="width:200px" />
但是当我使用SelectOneMenu组件尝试相同的方法时,它将不起作用。
我试过这段代码:
<p:selectOneMenu id="state" value="#{examenListBean.stateOption}"onchange="examTable.filter();">
<f:selectItems value="#{examenListBean.etatExamOptions}"/>
</p:selectOneMenu>
但没有用。
这是我的p:datatable标签:
<p:dataTable id="tabexam"
paginatorPosition="bottom"
var="exam"
value="#{examenListBean.listexam}"
widgetVar="examTable"
emptyMessage="Aucun résultat n'a été trouvé avec les critères donnés"
filteredValue="#{examenListBean.filteredexams}"
paginator="true"
rows="30"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15,30"
resizableColumns="true">
答案 0 :(得分:2)
尝试在服务器端过滤:
<p:selectOneMenu id="state" value="#{examenListBean.stateOption}">
<f:selectItems value="#{examenListBean.etatExamOptions}"/>
<p:ajax event="change" process="@this" listener="#{myBean.filteringMethod}" update=":absPath:tabexam"/>
</p:selectOneMenu>
不知道您的JavaScript方法是什么样的,可以尝试使用<p:remoteCommand>
并在那里更新您的表格。
答案 1 :(得分:2)
我遇到了同样的问题,而且似乎只是表面不允许它类型的东西。我的最终目标是能够将'selectOneMenu'表格从列中移出并将它们放入标题中,但此时此刻就是我所做的。
这是由于primefaces似乎访问它的结构,准备他们为过滤器做好准备。
我所做的是创建了一个'隐藏'的p:inputText字段,其id ='globalFilter'并且id为display:none ...
然后创建了2个搜索字段(一个使用selecOneMenu,另一个只使用inputText字段)。 然后使用这些类型的onchange或onkeyup函数来调用我的javascript函数,这些函数使用jQuery将隐藏字段更新为所选值,然后调用crpTable函数。
<script type="text/javascript">
function doFilter1()
{
$("#globalFilter").val($("#globalFilter1").val());
widgetVarTableId.filter();
};
function doFilter2()
{
$("#globalFilter").val($("#globalFilter2").val());
widgetVarTableId.filter();
};
</script>
<style>
.myGlobalFilter {
display:none;
}
</style>
在我的f:facet name = Header中有
<p:inputText id="globalFilter" styleClass="myGlobalFilter"/>
<h:outputText value="filter one: "/>
<h:selectOneMenu id="globalFilter1" onchange="doFilter1();">
<f:selectItems value="#{formBean.filterOptions}" />
</h:selectOneMenu>
<h:outputText value="filter two: "/>
<p:inputText id="globalFilter2" onkeyup="doFilter2();">
这正如我所期望的那样..但是使用primefaces .filter()的时间很短 - 你不能将它改为'exact''startsWith'等,它总是'包含'而没有修改PF源码。
希望这有帮助!