Filter in collapsibleSubTable
kineas Oct 7, 2013 10:56 AMHi,
I need to put filters (and sort if possible) in a collapsibleSubTable but I can't make it works perfectly.
My environment :
- Richfaces 4.3.4.Final
- Server Tomcat 6.0.36
First, here is my code without filters :
<rich:dataTable id="rolesAppliDataTableId" value="#{utilmanBean.listRoles}" var="role" rows="10"> <f:facet name="header"> <rich:columnGroup> <rich:column style="width:30%"> <h:outputText value="#{AM['label.role']}"/> </rich:column> <rich:column style="width:40%"> <h:outputText value="#{AM['label.description']}"/> </rich:column> <rich:column style="width:15%"> <h:outputText value="#{AM['label.area']}"/> </rich:column> <rich:column style="width:15%"> <h:outputText value="#{AM['label.privilege']}"/> </rich:column> </rich:columnGroup> </f:facet> <rich:collapsibleSubTable id="rolesAppliSubDataTableId" value="#{role.listAccesses}" var="access" rowKeyVar="rowKey" onrowclick="#{rich:element('selectRoleAppliId')}.click()"> <rich:column rowspan="#{role.nbAccessesInList}" rendered="#{rowKey eq 0}" styleClass="cursorClass"> <h:outputText value="#{role.name}"/> <!-- handle clic --> <a4j:commandButton style="display:none" id="selectRoleAppliId" action="#{utilmanController.selectRole}" render="panelAppliId" execute="@this" status="void"> <f:setPropertyActionListener target="#{utilmanBean.currentRole}" value="#{role}"/> </a4j:commandButton> </rich:column> <rich:column rowspan="#{role.nbAccessesInList}" rendered="#{rowKey eq 0}" styleClass="cursorClass"> <h:outputText value="#{role.description}"/> </rich:column> <rich:column styleClass="cursorClass"> <h:outputText value="#{access.area}"/> </rich:column> <rich:column styleClass="cursorClass"> <h:outputText value="#{access.privilege.name}"/> </rich:column> </rich:collapsibleSubTable> </rich:dataTable> <rich:dataScroller for="rolesAppliDataTableId" renderIfSinglePage="false" boundaryControls="#{commonBean.hide}" fastControls="#{commonBean.hide}" status="void" style="width:100%" render="rolesAppliDataTableId"/>
It works as intended and I got this :
Now I try to add filters for each columns. Here is my code :
<rich:dataTable id="rolesAppliDataTableId" value="#{utilmanBean.listRoles}" var="role" width="100%" rows="10"> <f:facet name="header"> <rich:columnGroup> <rich:column style="width:30%"> <h:panelGrid width="100%"> <h:outputText value="#{AM['label.role']}"/> <h:inputText value="#{commonBean.filterValues[1]}"> <a4j:ajax event="keyup" render="@body,rolesAppliDsId" status="void"/> </h:inputText> </h:panelGrid> </rich:column> <rich:column style="width:40%"> <h:panelGrid width="100%"> <h:outputText value="#{AM['label.description']}"/> <h:inputText value="#{commonBean.filterValues[2]}"> <a4j:ajax event="keyup" render="@body,rolesAppliDsId" status="void"/> </h:inputText> </h:panelGrid> </rich:column> <rich:column style="width:15%"> <h:panelGrid width="100%"> <h:outputText value="#{AM['label.area']}"/> <h:inputText value="#{commonBean.filterValues[3]}"> <a4j:ajax event="keyup" render="@body,rolesAppliDsId" status="void"/> </h:inputText> </h:panelGrid> </rich:column> <rich:column style="width:15%"> <h:panelGrid width="100%"> <h:outputText value="#{AM['label.privilege']}"/> <h:inputText value="#{commonBean.filterValues[4]}"> <a4j:ajax event="keyup" render="@body,rolesAppliDsId" status="void"/> </h:inputText> </h:panelGrid> </rich:column> </rich:columnGroup> </f:facet> <rich:collapsibleSubTable expanded="true" id="rolesAppliSubDataTableId" value="#{role.listAccesses}" var="access" rowKeyVar="rowKey" onrowclick="#{rich:element('selectRoleAppliId')}.click()"> <rich:column filterExpression="#{fn:containsIgnoreCase(role.name,commonBean.filterValues[1])}" rowspan="#{role.nbAccessesInList}" rendered="#{rowKey eq 0}" styleClass="cursorClass"> <h:outputText value="#{role.name}"/> <!-- handle clic --> <a4j:commandButton style="display:none" id="selectRoleAppliId" action="#{utilmanController.selectRole}" render="panelAppliId" execute="@this" status="void"> <f:setPropertyActionListener target="#{utilmanBean.currentRole}" value="#{role}"/> </a4j:commandButton> </rich:column> <rich:column filterExpression="#{fn:containsIgnoreCase(role.description,commonBean.filterValues[2])}" rowspan="#{role.nbAccessesInList}" rendered="#{rowKey eq 0}" styleClass="cursorClass"> <h:outputText value="#{role.description}"/> </rich:column> <rich:column styleClass="cursorClass" filterExpression="#{fn:containsIgnoreCase(access.area,commonBean.filterValues[3])}"> <h:outputText value="#{access.area}"/> </rich:column> <rich:column styleClass="cursorClass" filterExpression="#{fn:containsIgnoreCase(access.privilege.name,commonBean.filterValues[4])}"> <h:outputText value="#{access.privilege.name}"/> </rich:column> </rich:collapsibleSubTable> </rich:dataTable> <rich:dataScroller id="rolesAppliDsId" for="rolesAppliDataTableId" renderIfSinglePage="false" boundaryControls="#{commonBean.hide}" fastControls="#{commonBean.hide}" status="void" style="width:100%" render="rolesAppliDataTableId"/>
So, with this code, only the 3rd and 4th filter work, and I got some strange lines which appear :
Have you an idea of why it doesn't work and how I can make this work ?
Thanks