⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htmlnewspapertablerenderer.java

📁 一个使用struts+hibernate+spring开发的完的网站源代码。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     * 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 + -