📄 htmlnewspapertablerenderer.java
字号:
* Render table headers and footers. */ private void renderFacet(FacesContext facesContext, ResponseWriter writer, HtmlNewspaperTable newspaperTable, boolean header) throws IOException { int columnCount = countColumns(newspaperTable); boolean hasColumnFacet = hasFacet(newspaperTable, header); UIComponent facet = header ? newspaperTable.getHeader() : newspaperTable.getFooter(); // quit if there's nothing to draw if(facet == null && !hasColumnFacet) return; // start the row block HtmlRendererUtils.writePrettyLineSeparator(facesContext); String elemName = header ? HTML.THEAD_ELEM : HTML.TFOOT_ELEM; writer.startElement(elemName, newspaperTable); // fetch the style String styleClass; if(header) styleClass = getHeaderClass(newspaperTable); else styleClass = getFooterClass(newspaperTable); // write the header row and column headers if(header) { if (facet != null) renderTableHeaderOrFooterRow(facesContext, writer, newspaperTable, facet, styleClass, HTML.TD_ELEM, columnCount); if (hasColumnFacet) renderColumnHeaderOrFooterRow(facesContext, writer, newspaperTable, styleClass, header); // write the footer row and column footers } else { if (hasColumnFacet) renderColumnHeaderOrFooterRow(facesContext, writer, newspaperTable, styleClass, header); if (facet != null) renderTableHeaderOrFooterRow(facesContext, writer, newspaperTable, facet, styleClass, HTML.TD_ELEM, columnCount); } // end the row block writer.endElement(elemName); } /** * Renders the table header or footer row. This is one giant cell that spans * the entire table header or footer. */ private void renderTableHeaderOrFooterRow(FacesContext facesContext, ResponseWriter writer, HtmlNewspaperTable newspaperTable, UIComponent facet, String styleClass, String colElementName, int tableColumns) throws IOException { // start the row HtmlRendererUtils.writePrettyLineSeparator(facesContext); writer.startElement(HTML.TR_ELEM, newspaperTable); writer.startElement(colElementName, newspaperTable); if(styleClass != null) writer.writeAttribute(HTML.CLASS_ATTR, styleClass, null); if(colElementName.equals(HTML.TH_ELEM)) writer.writeAttribute(HTML.SCOPE_ATTR, HTML.SCOPE_COLGROUP_VALUE, null); // span all the table's columns int totalColumns = newspaperTable.getNewspaperColumns() * tableColumns; if(newspaperTable.getSpacer() != null) totalColumns = totalColumns + getNewspaperColumns() - 1; writer.writeAttribute(HTML.COLSPAN_ATTR, new Integer(totalColumns), null); // write the actual cell contents if(facet != null) RendererUtils.renderChild(facesContext, facet); // finish writer.endElement(colElementName); writer.endElement(HTML.TR_ELEM); } /** * Renders the column header or footer row. */ private void renderColumnHeaderOrFooterRow(FacesContext facesContext, ResponseWriter writer, HtmlNewspaperTable newspaperTable, String styleClass, boolean header) throws IOException { HtmlRendererUtils.writePrettyLineSeparator(facesContext); writer.startElement(HTML.TR_ELEM, newspaperTable); int newspaperColumns = newspaperTable.getNewspaperColumns(); for(int nc = 0; nc < newspaperColumns; nc++) { for(Iterator it = newspaperTable.getChildren().iterator(); it.hasNext(); ) { UIComponent uiComponent = (UIComponent)it.next(); if(!(uiComponent instanceof UIColumn)) continue; UIColumn column = (UIColumn)uiComponent; if(!column.isRendered()) continue; // get the component to render UIComponent facet = null; if(header) facet = column.getHeader(); else facet = column.getFooter(); // do the rendering of the cells renderColumnHeaderOrFooterCell(facesContext, writer, column, styleClass, facet); } // draw the spacer facet if(nc < newspaperColumns - 1) renderSpacerCell(facesContext, writer, newspaperTable); } writer.endElement(HTML.TR_ELEM); } /** * Renders a cell in the column header or footer. */ private void renderColumnHeaderOrFooterCell(FacesContext facesContext, ResponseWriter writer, UIColumn uiColumn, String styleClass, UIComponent facet) throws IOException { writer.startElement(HTML.TH_ELEM, uiColumn); if(styleClass != null) writer.writeAttribute(HTML.CLASS_ATTR, styleClass, null); if(facet != null) RendererUtils.renderChild(facesContext, facet); writer.endElement(HTML.TH_ELEM); } /** * Renders a spacer between adjacent newspaper columns. */ private void renderSpacerCell(FacesContext facesContext, ResponseWriter writer, HtmlNewspaperTable newspaperTable) throws IOException { if(newspaperTable.getSpacer() == null) return; writer.startElement(HTML.TD_ELEM, newspaperTable); RendererUtils.renderChild(facesContext, newspaperTable.getSpacer()); writer.endElement(HTML.TD_ELEM); } /** * Gets the style class for the table header. */ private static String getHeaderClass(HtmlNewspaperTable newspaperTable) { if(newspaperTable instanceof HtmlDataTable) { return ((HtmlDataTable)newspaperTable).getHeaderClass(); } else { return (String)newspaperTable.getAttributes().get(JSFAttr.HEADER_CLASS_ATTR); } } /** * Gets the style class for the table footer. */ private static String getFooterClass(HtmlNewspaperTable newspaperTable) { if(newspaperTable instanceof HtmlDataTable) { return ((HtmlDataTable)newspaperTable).getFooterClass(); } else { return (String)newspaperTable.getAttributes().get(JSFAttr.FOOTER_CLASS_ATTR); } } /** * Gets styles for the specified component. */ public static Styles getStyles(HtmlNewspaperTable newspaperTable) { String rowClasses; String columnClasses; if(newspaperTable instanceof HtmlDataTable) { rowClasses = ((HtmlDataTable)newspaperTable).getRowClasses(); columnClasses = ((HtmlDataTable)newspaperTable).getColumnClasses(); } else { rowClasses = (String)newspaperTable.getAttributes().get(JSFAttr.ROW_CLASSES_ATTR); columnClasses = (String)newspaperTable.getAttributes().get(JSFAttr.COLUMN_CLASSES_ATTR); } return new Styles(rowClasses, columnClasses); } /** * Class manages the styles from String lists. */ private static class Styles { private String[] _columnStyle; private String[] _rowStyle; Styles(String rowStyles, String columnStyles) { _rowStyle = (rowStyles == null) ? ArrayUtils.EMPTY_STRING_ARRAY : StringUtils.trim( StringUtils.splitShortString(rowStyles, ',')); _columnStyle = (columnStyles == null) ? ArrayUtils.EMPTY_STRING_ARRAY : StringUtils.trim( StringUtils.splitShortString(columnStyles, ',')); } public String getRowStyle(int idx) { if(!hasRowStyle()) { return null; } return _rowStyle[idx % _rowStyle.length]; } public String getColumnStyle(int idx) { if(!hasColumnStyle()) { return null; } return _columnStyle[idx % _columnStyle.length]; } public boolean hasRowStyle() { return _rowStyle.length > 0; } public boolean hasColumnStyle() { return _columnStyle.length > 0; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -