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

📄 htmlgridrenderer.java

📁 一个使用struts+hibernate+spring开发的完的网站源代码。
💻 JAVA
字号:
/* * Copyright 2004 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.myfaces.renderkit.html;import org.apache.myfaces.renderkit.JSFAttr;import org.apache.myfaces.renderkit.RendererUtils;import org.apache.myfaces.util.ArrayUtils;import org.apache.myfaces.util.StringUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import javax.faces.component.UIComponent;import javax.faces.component.UIPanel;import javax.faces.component.html.HtmlPanelGrid;import javax.faces.context.FacesContext;import javax.faces.context.ResponseWriter;import java.io.IOException;import java.util.Iterator;/** * X-CHECKED: tlddoc h:panelGrid 1.0 final * * $Log: HtmlGridRenderer.java,v $ * Revision 1.16  2004/12/23 13:03:08  mmarinschek * id's not rendered (or not conditionally rendered); changes in jslistener to support both ie and firefox now * * Revision 1.15  2004/11/21 12:39:09  mmarinschek * better Error handling * * Revision 1.14  2004/10/13 11:51:00  matze * renamed packages to org.apache * * Revision 1.13  2004/07/01 22:05:07  mwessendorf * ASF switch * * Revision 1.12  2004/06/17 03:57:14  dave0000 * Fix order of nested if statements (columns <= 0 check) + misc * * Revision 1.11  2004/06/04 00:51:05  o_rossmueller * fixed NPE * * Revision 1.10  2004/06/03 23:02:14  o_rossmueller * fix for completion of last row * * Revision 1.9  2004/06/03 13:41:08  o_rossmueller * fix #962084: render rowClasses * * Revision 1.8  2004/03/31 13:43:29  royalts * no message * * Revision 1.7  2004/03/29 14:56:55  manolito * refactoring for implementation and non-standard component split * * Revision 1.6  2004/03/25 12:42:24  manolito * x-checked and corrected GridRenderer * * @author Manfred Geiler (latest modification by $Author: mmarinschek $) * @author Thomas Spiegl * @version $Revision: 1.16 $ $Date: 2004/12/23 13:03:08 $ */public class HtmlGridRenderer    extends HtmlRenderer{    private static final Log log = LogFactory.getLog(HtmlGridRenderer.class);    public boolean getRendersChildren()    {        return true;    }    public void encodeBegin(FacesContext facesContext, UIComponent component)            throws IOException    {        // all work done in encodeEnd()    }    public void encodeChildren(FacesContext context, UIComponent component)        throws IOException    {        // all work done in encodeEnd()    }    public void encodeEnd(FacesContext facesContext, UIComponent component)            throws IOException    {        RendererUtils.checkParamValidity(facesContext, component, UIPanel.class);        int columns;        if (component instanceof HtmlPanelGrid)        {            columns = ((HtmlPanelGrid)component).getColumns();        }        else        {            Integer i = (Integer)component.getAttributes().get(JSFAttr.COLUMNS_ATTR);            columns = i != null ? i.intValue() : 0;        }        if (columns <= 0)        {            if (log.isErrorEnabled())            {                log.error("Wrong columns attribute for PanelGrid " + component.getClientId(facesContext) + ": " + columns);            }            columns = 1;        }        ResponseWriter writer = facesContext.getResponseWriter();        writer.startElement(HTML.TABLE_ELEM, component);        HtmlRendererUtils.writeIdIfNecessary(writer, component, facesContext);        HtmlRendererUtils.renderHTMLAttributes(writer, component, HTML.TABLE_PASSTHROUGH_ATTRIBUTES);        writer.flush();        renderHeaderOrFooter(facesContext, writer, component, columns, true);   //Header facet        renderChildren(facesContext, writer, component, columns);        renderHeaderOrFooter(facesContext, writer, component, columns, false);  //Footer facet        writer.endElement(HTML.TABLE_ELEM);    }    private void renderHeaderOrFooter(FacesContext context,                                      ResponseWriter writer,                                      UIComponent component,                                      int columns,                                      boolean header)        throws IOException    {        UIComponent facet = component.getFacet(header ? "header" : "footer");        if (facet == null) return;        HtmlRendererUtils.writePrettyLineSeparator(context);        writer.startElement(header ? HTML.THEAD_ELEM : HTML.TFOOT_ELEM, component);        writer.startElement(HTML.TR_ELEM, component);        writer.startElement(header ? HTML.TH_ELEM : HTML.TD_ELEM, component);        String styleClass = (component instanceof HtmlPanelGrid)            ? (header ?                         ((HtmlPanelGrid)component).getHeaderClass() :                         ((HtmlPanelGrid)component).getFooterClass())            : (header ?                         (String)component.getAttributes().get(JSFAttr.HEADER_CLASS_ATTR) :                         (String)component.getAttributes().get(JSFAttr.FOOTER_CLASS_ATTR));        if (styleClass != null)        {            writer.writeAttribute(HTML.CLASS_ATTR, styleClass,                                  header ? JSFAttr.HEADER_CLASS_ATTR : JSFAttr.FOOTER_CLASS_ATTR);        }        if (header)        {            writer.writeAttribute(HTML.SCOPE_ATTR, HTML.SCOPE_COLGROUP_VALUE, null);        }        writer.writeAttribute(HTML.COLSPAN_ATTR, Integer.toString(columns), null);        HtmlRendererUtils.writePrettyLineSeparator(context);        RendererUtils.renderChild(context, facet);        HtmlRendererUtils.writePrettyLineSeparator(context);        writer.endElement(header ? HTML.TH_ELEM : HTML.TD_ELEM);        writer.endElement(HTML.TR_ELEM);        writer.endElement(header ? HTML.THEAD_ELEM : HTML.TFOOT_ELEM);    }    private void renderChildren(FacesContext context,                                ResponseWriter writer,                                UIComponent component,                                int columns)        throws IOException    {        try        {            writer.startElement(HTML.TBODY_ELEM, component);            String columnClasses;            String rowClasses;            if (component instanceof HtmlPanelGrid)            {                columnClasses = ((HtmlPanelGrid)component).getColumnClasses();                rowClasses =  ((HtmlPanelGrid)component).getRowClasses();            }            else            {                columnClasses = (String)component.getAttributes().get(JSFAttr.COLUMN_CLASSES_ATTR);                rowClasses = (String)component.getAttributes().get(JSFAttr.ROW_CLASSES_ATTR);            }            String[] columnClassesArray = (columnClasses == null)                ? ArrayUtils.EMPTY_STRING_ARRAY                : StringUtils.trim(StringUtils.splitShortString(columnClasses, ','));            int columnClassesCount = columnClassesArray.length;            String[] rowClassesArray = (rowClasses == null)                ? ArrayUtils.EMPTY_STRING_ARRAY                : StringUtils.trim(StringUtils.splitShortString(rowClasses, ','));            int rowClassesCount = rowClassesArray.length;            int childCount = component.getChildCount();            if (childCount > 0)            {                int columnIndex = 0;                int rowClassIndex = 0;                boolean rowStarted = false;                for (Iterator it = component.getChildren().iterator(); it.hasNext(); )                {                    UIComponent child = (UIComponent)it.next();                    if (child.isRendered())                    {                        if (columnIndex == 0)                        {                            //start of new/next row                            if (rowStarted)                            {                                //do we have to close the last row?                                writer.endElement(HTML.TR_ELEM);                                HtmlRendererUtils.writePrettyLineSeparator(context);                            }                            writer.startElement(HTML.TR_ELEM, component);                            if (rowClassIndex < rowClassesCount) {                                writer.writeAttribute(HTML.CLASS_ATTR, rowClassesArray[rowClassIndex], null);                            }                            rowStarted = true;                            rowClassIndex++;                            if (rowClassIndex == rowClassesCount) {                                rowClassIndex = 0;                            }                        }                        writer.startElement(HTML.TD_ELEM, component);                        if (columnIndex < columnClassesCount)                        {                            writer.writeAttribute(HTML.CLASS_ATTR, columnClassesArray[columnIndex], null);                        }                        RendererUtils.renderChild(context, child);                        writer.endElement(HTML.TD_ELEM);                        columnIndex++;                        if (columnIndex >= columns) {                            columnIndex = 0;                        }                    }                }                if (rowStarted)                {                    if (columnIndex > 0)                    {                        if (log.isWarnEnabled()) log.warn("PanelGrid " + component.getClientId(context) + " has not enough children. Child count should be a multiple of the columns attribute.");                        //Render empty columns, so that table is correct                        for ( ; columnIndex < columns; columnIndex++)                        {                            writer.startElement(HTML.TD_ELEM, component);                            if (columnIndex < columnClassesCount)                            {                                writer.writeAttribute(HTML.CLASS_ATTR, columnClassesArray[columnIndex], null);                            }                            writer.endElement(HTML.TD_ELEM);                        }                    }                    writer.endElement(HTML.TR_ELEM);                    HtmlRendererUtils.writePrettyLineSeparator(context);                }            }            writer.endElement(HTML.TBODY_ELEM);        }        catch(IOException ex)        {            throw ex;        }        catch(RuntimeException ex2)        {            log.error("Exception while rendering children of panel-grid.",ex2);            throw ex2;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -