You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by sc...@apache.org on 2005/05/27 16:23:30 UTC

svn commit: r178785 - in /myfaces/trunk: conf/ src/components/org/apache/myfaces/component/html/ext/ src/components/org/apache/myfaces/custom/crosstable/ src/components/org/apache/myfaces/renderkit/html/ext/ src/share/org/apache/myfaces/renderkit/html/

Author: schof
Date: Fri May 27 07:23:29 2005
New Revision: 178785

URL: http://svn.apache.org/viewcvs?rev=178785&view=rev
Log:
Fixes MYFACES-171 (Thanks to Mathias Broeklmann for the patch)

Modified:
    myfaces/trunk/conf/faces-config.xml
    myfaces/trunk/src/components/org/apache/myfaces/component/html/ext/HtmlDataTable.java
    myfaces/trunk/src/components/org/apache/myfaces/custom/crosstable/HtmlColumnsTag.java
    myfaces/trunk/src/components/org/apache/myfaces/custom/crosstable/UIColumns.java
    myfaces/trunk/src/components/org/apache/myfaces/renderkit/html/ext/HtmlTableRenderer.java
    myfaces/trunk/src/share/org/apache/myfaces/renderkit/html/HtmlTableRendererBase.java

Modified: myfaces/trunk/conf/faces-config.xml
URL: http://svn.apache.org/viewcvs/myfaces/trunk/conf/faces-config.xml?rev=178785&r1=178784&r2=178785&view=diff
==============================================================================
--- myfaces/trunk/conf/faces-config.xml (original)
+++ myfaces/trunk/conf/faces-config.xml Fri May 27 07:23:29 2005
@@ -314,7 +314,7 @@
 
 	<component>
 		<component-type>org.apache.myfaces.Columns</component-type>
-		<component-class>org.apache.myfaces.component.UIColumns</component-class>
+		<component-class>org.apache.myfaces.custom.crosstable.UIColumns</component-class>
 	</component>
 
     <!-- additional "by type" converters -->

Modified: myfaces/trunk/src/components/org/apache/myfaces/component/html/ext/HtmlDataTable.java
URL: http://svn.apache.org/viewcvs/myfaces/trunk/src/components/org/apache/myfaces/component/html/ext/HtmlDataTable.java?rev=178785&r1=178784&r2=178785&view=diff
==============================================================================
--- myfaces/trunk/src/components/org/apache/myfaces/component/html/ext/HtmlDataTable.java (original)
+++ myfaces/trunk/src/components/org/apache/myfaces/component/html/ext/HtmlDataTable.java Fri May 27 07:23:29 2005
@@ -17,7 +17,7 @@
 
 import org.apache.myfaces.component.UserRoleAware;
 import org.apache.myfaces.component.UserRoleUtils;
-import org.apache.myfaces.component.UIColumns;
+import org.apache.myfaces.custom.crosstable.UIColumns;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 

Modified: myfaces/trunk/src/components/org/apache/myfaces/custom/crosstable/HtmlColumnsTag.java
URL: http://svn.apache.org/viewcvs/myfaces/trunk/src/components/org/apache/myfaces/custom/crosstable/HtmlColumnsTag.java?rev=178785&r1=178784&r2=178785&view=diff
==============================================================================
--- myfaces/trunk/src/components/org/apache/myfaces/custom/crosstable/HtmlColumnsTag.java (original)
+++ myfaces/trunk/src/components/org/apache/myfaces/custom/crosstable/HtmlColumnsTag.java Fri May 27 07:23:29 2005
@@ -17,7 +17,6 @@
 
 import javax.faces.component.UIComponent;
 
-import org.apache.myfaces.component.UIColumns;
 import org.apache.myfaces.renderkit.JSFAttr;
 import org.apache.myfaces.taglib.html.HtmlComponentBodyTagBase;
 
@@ -27,33 +26,33 @@
  */
 public class HtmlColumnsTag extends HtmlComponentBodyTagBase
 {
-  private String mVar;
+    private String mVar;
 
-  /**
-   * @see javax.faces.webapp.UIComponentTag#getComponentType()
-   */
-  public String getComponentType()
-  {
-    return UIColumns.COMPONENT_TYPE;
-  }
-
-  /**
-   * @see javax.faces.webapp.UIComponentTag#getRendererType()
-   */
-  public String getRendererType()
-  {
-    return null;
-  }
-
-  public void setVar(String var)
-  {
-    mVar = var;
-  }
-
-  protected void setProperties(UIComponent component)
-  {
-    super.setProperties(component);
+    /**
+     * @see javax.faces.webapp.UIComponentTag#getComponentType()
+     */
+    public String getComponentType()
+    {
+        return UIColumns.COMPONENT_TYPE;
+    }
+
+    /**
+     * @see javax.faces.webapp.UIComponentTag#getRendererType()
+     */
+    public String getRendererType()
+    {
+        return null;
+    }
+
+    public void setVar(String var)
+    {
+        mVar = var;
+    }
+
+    protected void setProperties(UIComponent component)
+    {
+        super.setProperties(component);
 
-    setStringProperty(component, JSFAttr.VAR_ATTR, mVar);
-  }
+        setStringProperty(component, JSFAttr.VAR_ATTR, mVar);
+    }
 }

Modified: myfaces/trunk/src/components/org/apache/myfaces/custom/crosstable/UIColumns.java
URL: http://svn.apache.org/viewcvs/myfaces/trunk/src/components/org/apache/myfaces/custom/crosstable/UIColumns.java?rev=178785&r1=178784&r2=178785&view=diff
==============================================================================
--- myfaces/trunk/src/components/org/apache/myfaces/custom/crosstable/UIColumns.java (original)
+++ myfaces/trunk/src/components/org/apache/myfaces/custom/crosstable/UIColumns.java Fri May 27 07:23:29 2005
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.myfaces.component;
+package org.apache.myfaces.custom.crosstable;
 
 import javax.faces.component.UIData;
 

Modified: myfaces/trunk/src/components/org/apache/myfaces/renderkit/html/ext/HtmlTableRenderer.java
URL: http://svn.apache.org/viewcvs/myfaces/trunk/src/components/org/apache/myfaces/renderkit/html/ext/HtmlTableRenderer.java?rev=178785&r1=178784&r2=178785&view=diff
==============================================================================
--- myfaces/trunk/src/components/org/apache/myfaces/renderkit/html/ext/HtmlTableRenderer.java (original)
+++ myfaces/trunk/src/components/org/apache/myfaces/renderkit/html/ext/HtmlTableRenderer.java Fri May 27 07:23:29 2005
@@ -9,8 +9,10 @@
 import javax.faces.context.ResponseWriter;
 import java.io.IOException;
 import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
 import javax.faces.component.UIData;
 import org.apache.myfaces.component.html.ext.HtmlDataTable;
+import org.apache.myfaces.custom.crosstable.UIColumns;
 import org.apache.myfaces.renderkit.html.HTML;
 
 public class HtmlTableRenderer
@@ -40,5 +42,85 @@
         {
             writer.writeAttribute(HTML.ONMOUSEOUT_ATTR, rowOnMouseOut, null);
         }
+    }
+
+    /**
+     * handles uicolumns component
+     * @see org.apache.myfaces.renderkit.html.HtmlTableRendererBase#encodeColumnChild(javax.faces.context.FacesContext, javax.faces.context.ResponseWriter, javax.faces.component.UIData, javax.faces.component.UIComponent, java.lang.String)
+     */
+    protected void encodeColumnChild(FacesContext facesContext, ResponseWriter writer,
+                    UIData uiData, UIComponent component, String columnStyle) throws IOException
+    {
+        super.encodeColumnChild(facesContext, writer, uiData, component, columnStyle);
+        if (component instanceof UIColumns)
+        {
+            UIColumns columns = (UIColumns) component;
+            for (int k = 0, colSize = columns.getRowCount(); k < colSize; k++)
+            {
+                columns.setRowIndex(k);
+                renderColumnBody(facesContext, writer, uiData, component, columnStyle);
+            }
+            columns.setRowIndex(-1);
+        }
+    }
+
+    /**
+     * handles uicolumns component
+     * @see org.apache.myfaces.renderkit.html.HtmlTableRendererBase#renderColumnChildHeaderOrFooterRow(javax.faces.context.FacesContext, javax.faces.context.ResponseWriter, javax.faces.component.UIComponent, java.lang.String, boolean)
+     */
+    protected void renderColumnChildHeaderOrFooterRow(FacesContext facesContext,
+                    ResponseWriter writer, UIComponent uiComponent, String styleClass,
+                    boolean header) throws IOException
+    {
+        super.renderColumnChildHeaderOrFooterRow(facesContext, writer, uiComponent, styleClass,
+                        header);
+        if (uiComponent instanceof UIColumns)
+        {
+            UIColumns columns = (UIColumns) uiComponent;
+            for (int i = 0, size = columns.getRowCount(); i < size; i++)
+            {
+                columns.setRowIndex(i);
+                if (header)
+                {
+                    renderColumnHeaderCell(facesContext, writer, columns, columns.getHeader(),
+                                    styleClass, 0);
+                }
+                else
+                {
+                    renderColumnFooterCell(facesContext, writer, columns, columns.getFooter(),
+                                    styleClass, 0);
+                }
+            }
+            columns.setRowIndex(-1);
+        }
+    }
+
+    /**
+     * handles uicolumns component
+     * @see org.apache.myfaces.renderkit.html.HtmlTableRendererBase#determineChildColSpan(javax.faces.component.UIComponent)
+     */
+    protected int determineChildColSpan(UIComponent uiComponent)
+    {
+        int result = super.determineChildColSpan(uiComponent);
+        if (uiComponent instanceof UIColumns)
+        {
+            result += ((UIColumns) uiComponent).getRowCount();
+        }
+        return result;
+    }
+
+    /**
+     * handles uicolumns component
+     * @see org.apache.myfaces.renderkit.html.HtmlTableRendererBase#hasFacet(boolean, javax.faces.component.UIComponent)
+     */
+    protected boolean hasFacet(boolean header, UIComponent uiComponent)
+    {
+        boolean result = super.hasFacet(header, uiComponent);
+        if (!result && uiComponent instanceof UIColumns)
+        {
+            UIColumns columns = (UIColumns) uiComponent;
+            result = header ? columns.getHeader() != null : columns.getFooter() != null;
+        }
+        return result;
     }
 }

Modified: myfaces/trunk/src/share/org/apache/myfaces/renderkit/html/HtmlTableRendererBase.java
URL: http://svn.apache.org/viewcvs/myfaces/trunk/src/share/org/apache/myfaces/renderkit/html/HtmlTableRendererBase.java?rev=178785&r1=178784&r2=178785&view=diff
==============================================================================
--- myfaces/trunk/src/share/org/apache/myfaces/renderkit/html/HtmlTableRendererBase.java (original)
+++ myfaces/trunk/src/share/org/apache/myfaces/renderkit/html/HtmlTableRendererBase.java Fri May 27 07:23:29 2005
@@ -19,7 +19,6 @@
 import org.apache.myfaces.renderkit.RendererUtils;
 import org.apache.myfaces.util.ArrayUtils;
 import org.apache.myfaces.util.StringUtils;
-import org.apache.myfaces.component.UIColumns;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -135,22 +134,7 @@
                 UIComponent child = (UIComponent) children.get(j);
                 if(child.isRendered())
                 {
-                    if (child instanceof UIColumn)
-                    {
-                        String columnStyle = styles.getColumnStyle(j);
-                          renderColumnBody(facesContext, writer, uiData, child, columnStyle);
-                    }
-                    else if (child instanceof UIColumns)
-                    {
-                        UIColumns columns = (UIColumns) child;
-                        for (int k = 0, colSize = columns.getRowCount(); k < colSize; k++)
-                        {
-                            columns.setRowIndex(k);
-                            String columnStyle = styles.getColumnStyle(j);
-                            renderColumnBody(facesContext, writer, uiData, child, columnStyle);
-                        }
-                        columns.setRowIndex(-1);
-                    }
+                	encodeColumnChild(facesContext, writer, uiData, child, styles.getColumnStyle(j));
                 }
             }
             renderRowEnd(facesContext, writer, uiData);
@@ -160,6 +144,15 @@
         writer.endElement(HTML.TBODY_ELEM);
     }
 
+	protected void encodeColumnChild(FacesContext facesContext, ResponseWriter writer, 
+	    UIData uiData, UIComponent component, String columnStyle) throws IOException
+	{
+        if (component instanceof UIColumn)
+        {
+			renderColumnBody(facesContext, writer, uiData, component, columnStyle);
+        }
+	}
+
     /**
      * Renders the body of a given <code>UIColumn</code> (everything but the header and footer facets).
      * @param facesContext the <code>FacesContext</code>.
@@ -292,23 +285,10 @@
             UIComponent uiComponent = (UIComponent) it.next();
             if(uiComponent.isRendered())
             {
-              if (uiComponent instanceof UIColumn)
-              {
-                  colspan++;
+              	colspan += determineChildColSpan(uiComponent);
                   if (!hasColumnFacet)
                   {
-                      hasColumnFacet = header ? ((UIColumn) uiComponent).getHeader() != null : ((UIColumn) uiComponent)
-                              .getFooter() != null;
-                  }
-              }
-              else if (uiComponent instanceof UIColumns)
-              {
-                  UIColumns columns = (UIColumns) uiComponent;
-                  colspan += columns.getRowCount();
-                  if (!hasColumnFacet)
-                  {
-                      hasColumnFacet = header ? columns.getHeader() != null : columns.getFooter() != null;
-                  }
+              	  	hasColumnFacet = hasFacet(header, uiComponent); 
               }
             }
         }
@@ -343,6 +323,30 @@
     }
 
 	/**
+	 * @param header
+	 * @param uiComponent
+	 * @return
+	 */
+	protected boolean hasFacet(boolean header, UIComponent uiComponent)
+	{
+		if (uiComponent instanceof UIColumn)
+		{
+		  	UIColumn uiColumn = (UIColumn) uiComponent;
+		  	return header ? uiColumn.getHeader() != null : uiColumn.getFooter() != null;
+		}
+		return false;
+	}
+	
+	protected int determineChildColSpan(UIComponent uiComponent)
+	{
+		if (uiComponent instanceof UIColumn)
+		{
+		    return 1;
+		}
+		return 0;
+	}
+
+    /**
 	 * Renders the header row of the table being rendered.
 	 * @param facesContext the <code>FacesContext</code>.
 	 * @param writer the <code>ResponseWriter</code>.
@@ -442,6 +446,15 @@
             UIComponent uiComponent = (UIComponent) it.next();
             if(uiComponent.isRendered())
             {
+                renderColumnChildHeaderOrFooterRow(facesContext, writer, uiComponent, styleClass, header);
+            }
+        }
+        writer.endElement(HTML.TR_ELEM);
+    }
+
+    protected void renderColumnChildHeaderOrFooterRow(FacesContext facesContext, 
+        ResponseWriter writer, UIComponent uiComponent, String styleClass, boolean header) throws IOException
+    {
               if (uiComponent instanceof UIColumn)
               {
                   if (header)
@@ -455,28 +468,6 @@
                           ((UIColumn) uiComponent).getFooter(), styleClass, 0);
                   }
               }
-              else if (uiComponent instanceof UIColumns)
-              {
-                  UIColumns columns = (UIColumns) uiComponent;
-                  for (int i = 0, size = columns.getRowCount(); i < size; i++)
-                  {
-                      columns.setRowIndex(i);
-                      if (header)
-                      {
-                          renderColumnHeaderCell(facesContext, writer, columns, columns.getHeader(),
-                              styleClass, 0);
-                      }
-                      else
-                      {
-                          renderColumnFooterCell(facesContext, writer, columns, columns.getFooter(),
-                              styleClass, 0);
-                      }
-                  }
-                  columns.setRowIndex(-1);
-              }
-            }
-        }
-        writer.endElement(HTML.TR_ELEM);
     }
 
     /**
@@ -662,4 +653,4 @@
         super.decode(context, component);
     }
 
-}
\ No newline at end of file
+}