📄 htmlgridrenderer.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 + -