ExtendedDataTableRenderer extends SelectionRenderer implements MetaComponentRenderer { @Override protected void doDecode(FacesContext context, UIComponent component) { super.doDecode(context, component); Map<String, String> map = context.getExternalContext().getRequestParameterMap(); String clientId = component.getClientId(context); updateWidthOfColumns(context, component, map.get(clientId + ":wi")); if (map.get(clientId) != null) { updateColumnsOrder(context, component, map.get("rich:columnsOrder")); } if (map.get(clientId) != null) { updateClientFirst(context, component, map.get("rich:clientFirst")); } decodeSortingFiltering(context, component); if (component.getAttributes().get("tableState") != null) { ExtendedDataTableState tableState = new ExtendedDataTableState((UIDataTableBase) component); updateAttribute(context, component, "tableState", tableState.toString()); } }  void encodeHeader(RendererState state); void encodeBody(RendererState state); void encodeFooter(RendererState state); void encodeMetaComponent(FacesContext context, UIComponent component, String metaComponentId); void decodeMetaComponent(FacesContext context, UIComponent component, String metaComponentId); RendererState createRowHolder(FacesContext context, UIComponent component, Object[] options); void encodeRow(ResponseWriter writer, FacesContext facesContext, RowHolderBase rowHolder); void consumeTableState(FacesContext facesContext, UIDataTableBase table, ExtendedDataTableState tableState);  }
@Test public final void testFilteringWithoutClean() throws IOException { FacesRequest facesRequest = startFacesRequest(); FacesContext facesContext = FacesContext.getCurrentInstance(); AbstractExtendedDataTable component = (AbstractExtendedDataTable) facesContext.getViewRoot().findComponent("table"); ExtendedDataTableRenderer renderer = (ExtendedDataTableRenderer) FacesContext.getCurrentInstance().getRenderKit() .getRenderer(component.getFamily(), component.getRendererType()); Map<String, Object> column1Attributes = component.findComponent("column1").getAttributes(); Map<String, Object> column2Attributes = component.findComponent("column2").getAttributes(); String clientId = component.getClientId(facesContext); assertNull(column1Attributes.get("filterValue")); assertEquals("filterValue2", column2Attributes.get("filterValue")); facesRequest.withParameter(clientId, clientId); facesRequest.withParameter(clientId + "rich:filtering", "column1:filterValue1:null"); renderer.doDecode(facesContext, component); assertEquals("filterValue1", column1Attributes.get("filterValue")); assertEquals("filterValue2", column2Attributes.get("filterValue")); assertTrue(facesContext.getPartialViewContext().getRenderIds().contains(clientId)); facesRequest.release(); }
@Test public final void testFilteringWithClean() throws IOException { FacesRequest facesRequest = startFacesRequest(); FacesContext facesContext = FacesContext.getCurrentInstance(); AbstractExtendedDataTable component = (AbstractExtendedDataTable) facesContext.getViewRoot().findComponent("table"); ExtendedDataTableRenderer renderer = (ExtendedDataTableRenderer) FacesContext.getCurrentInstance().getRenderKit() .getRenderer(component.getFamily(), component.getRendererType()); Map<String, Object> column1Attributes = component.findComponent("column1").getAttributes(); Map<String, Object> column2Attributes = component.findComponent("column2").getAttributes(); String clientId = component.getClientId(facesContext); assertNull(column1Attributes.get("filterValue")); assertEquals("filterValue2", column2Attributes.get("filterValue")); facesRequest.withParameter(clientId, clientId); facesRequest.withParameter(clientId + "rich:filtering", "column1:filterValue1:true"); renderer.doDecode(facesContext, component); assertEquals("filterValue1", column1Attributes.get("filterValue")); assertNull(column2Attributes.get("filterValue")); assertTrue(facesContext.getPartialViewContext().getRenderIds().contains(clientId)); facesRequest.release(); }
@Test public final void testColumnResizing() throws IOException { FacesRequest facesRequest = startFacesRequest(); FacesContext facesContext = FacesContext.getCurrentInstance(); AbstractExtendedDataTable component = (AbstractExtendedDataTable) facesContext.getViewRoot().findComponent("table"); ExtendedDataTableRenderer renderer = (ExtendedDataTableRenderer) FacesContext.getCurrentInstance().getRenderKit() .getRenderer(component.getFamily(), component.getRendererType()); Map<String, Object> column1Attributes = component.findComponent("column1").getAttributes(); assertNull(column1Attributes.get("width")); facesRequest.withParameter(component.getClientId(facesContext) + ":wi", "column1:200px"); renderer.doDecode(facesContext, component); assertEquals("200px", column1Attributes.get("width")); facesRequest.release(); }
@Test public final void testColumnReordering() throws IOException { FacesRequest facesRequest = startFacesRequest(); FacesContext facesContext = FacesContext.getCurrentInstance(); AbstractExtendedDataTable component = (AbstractExtendedDataTable) facesContext.getViewRoot().findComponent("table"); ExtendedDataTableRenderer renderer = (ExtendedDataTableRenderer) FacesContext.getCurrentInstance().getRenderKit() .getRenderer(component.getFamily(), component.getRendererType()); Map<String, Object> componentAttributes = component.getAttributes(); String clientId = component.getClientId(facesContext); assertNull(componentAttributes.get("columnsOrder")); facesRequest.withParameter(clientId, clientId); facesRequest.withParameter("rich:columnsOrder", "column2,column1"); renderer.doDecode(facesContext, component); assertTrue(facesContext.getPartialViewContext().getRenderIds().contains(clientId)); assertTrue(Arrays.equals(new String[] { "column2", "column1" }, (String[]) componentAttributes.get("columnsOrder"))); facesRequest.release(); }
@Test public final void testSortingWithoutClean() throws IOException { FacesRequest facesRequest = startFacesRequest(); FacesContext facesContext = FacesContext.getCurrentInstance(); AbstractExtendedDataTable component = (AbstractExtendedDataTable) facesContext.getViewRoot().findComponent("table"); ExtendedDataTableRenderer renderer = (ExtendedDataTableRenderer) FacesContext.getCurrentInstance().getRenderKit() .getRenderer(component.getFamily(), component.getRendererType()); Map<String, Object> column1Attributes = component.findComponent("column1").getAttributes(); Map<String, Object> column2Attributes = component.findComponent("column2").getAttributes(); String clientId = component.getClientId(facesContext); assertNull(column1Attributes.get("sortOrder")); assertEquals(SortOrder.ascending, column2Attributes.get("sortOrder")); facesRequest.withParameter(clientId, clientId); facesRequest.withParameter(clientId + "rich:sorting", "column1:null:null"); renderer.doDecode(facesContext, component); assertEquals(SortOrder.ascending, column1Attributes.get("sortOrder")); assertEquals(SortOrder.ascending, column2Attributes.get("sortOrder")); assertTrue(facesContext.getPartialViewContext().getRenderIds().contains(clientId)); facesRequest.release(); }
@Test public final void testSortingWithClean() throws IOException { FacesRequest facesRequest = startFacesRequest(); FacesContext facesContext = FacesContext.getCurrentInstance(); AbstractExtendedDataTable component = (AbstractExtendedDataTable) facesContext.getViewRoot().findComponent("table"); ExtendedDataTableRenderer renderer = (ExtendedDataTableRenderer) FacesContext.getCurrentInstance().getRenderKit() .getRenderer(component.getFamily(), component.getRendererType()); Map<String, Object> column1Attributes = component.findComponent("column1").getAttributes(); Map<String, Object> column2Attributes = component.findComponent("column2").getAttributes(); String clientId = component.getClientId(facesContext); assertNull(column1Attributes.get("sortOrder")); assertEquals(SortOrder.ascending, column2Attributes.get("sortOrder")); facesRequest.withParameter(clientId, clientId); facesRequest.withParameter(clientId + "rich:sorting", "column1:descending:true"); renderer.doDecode(facesContext, component); assertEquals(SortOrder.descending, column1Attributes.get("sortOrder")); assertEquals(SortOrder.unsorted, column2Attributes.get("sortOrder")); assertTrue(facesContext.getPartialViewContext().getRenderIds().contains(clientId)); facesRequest.release(); }
@Test public final void testScrolling() throws IOException { FacesRequest facesRequest = startFacesRequest(); FacesContext facesContext = FacesContext.getCurrentInstance(); AbstractExtendedDataTable component = (AbstractExtendedDataTable) facesContext.getViewRoot().findComponent("table"); ExtendedDataTableRenderer renderer = (ExtendedDataTableRenderer) FacesContext.getCurrentInstance().getRenderKit() .getRenderer(component.getFamily(), component.getRendererType()); Map<String, Object> componentAttributes = component.getAttributes(); String clientId = component.getClientId(facesContext); assertNull(componentAttributes.get(AbstractExtendedDataTable.SUBMITTED_CLIENT_FIRST)); facesRequest.withParameter(clientId, clientId); facesRequest.withParameter("rich:clientFirst", "28"); renderer.doDecode(facesContext, component); assertEquals(28, componentAttributes.get(AbstractExtendedDataTable.SUBMITTED_CLIENT_FIRST)); assertTrue(facesContext.getPartialViewContext().getRenderIds() .contains(clientId + "@" + AbstractExtendedDataTable.SCROLL)); facesRequest.release(); }