2013-12-16 86 views
1

我想在数据表中做一个过滤器(primefaces 3.5)。只有当用户点击一个commandLink时才会触发过滤器。primefaces - 数据过滤器

<h:commandLink title="#{open}" 
onclick="$('#form\\:filteredTable\\:statusColumn_filter').val('OPEN'), filteredTable.filter()"> 
<h:graphicImage name="16x16.png" styleClass="ico" /> 
</h:commandLink> 

我的表:

<h:form id="form"> 
    <h:panelGroup> 
     <div> 
      <p:dataTable widgetVar="filteredTable" var="y" value="#{x}" rendered="#{w.showFilterButtons}" filteredValue="#{w.filteredX}"> 
       <p:column id="statusColumn" headerText="label" 
        filterBy="#{y.status}" filterMatchMode="exact" 
        filterStyle="display:none;" 
        filterOptions="#{w.statuses}"> 
        <h:outputText value="#{y.status.name}"/> 
       </p:column> 
      </p:dataTable> 
     </div> 
    </h:panelGroup> 
</h:form> 

我有3个问题与此代码:

1 - 过滤器不起作用。如果我点击commandLink,页面会重新加载但没有被过滤。可能是因为#form \:filteredTable \:statusColumn_filter').val()返回undefined。所以我想我没有设置值来做滤波器(对吧?)

2 - 我想做一个默认的过滤器,所以当数据表第一次加载时,它已经被状态过滤了。

3 - 此数据表在Google地图中弹出。但是当我点击commandLink时,整个页面都会重新加载,所以弹出窗口会“关闭”,地图会返回到初始缩放。这样,用户将不得不再次缩放,单击地图上的标记以再次打开弹出窗口以查看过滤的数据。不是很好。有一种方法只能重新加载数据表?

回答

1

我想通了,忘了在这里发布我的解决方案。

服务器端:值“x”是默认值列表。当用户点击commandButton时,会调用一个方法来更新列表。

的commandButton:

<p:commandButton actionListener="#{bean.upadteXList}" 
    update="filteredTableId" 
    oncomplete="filteredTable.filter()" 
/> 

数据表:

<h:form id="form"> 
    <h:panelGroup> 
     <div> 
      <p:dataTable id="filteredTableId" widgetVar="filteredTable" var="y" value="#{x}" rendered="#{w.showFilterButtons}"> 
       <p:column id="statusColumn" headerText="label"> 
        <h:outputText value="#{y.status.name}"/> 
       </p:column> 
      </p:dataTable> 
     </div> 
    </h:panelGroup> 
</h:form>