You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2008/06/07 23:51:20 UTC

svn commit: r664401 - in /myfaces/shared/trunk_3.0.x/core/src/main/java/org/apache/myfaces/shared: component/ExecuteOnCallback.java renderkit/html/HtmlTableRendererBase.java

Author: lu4242
Date: Sat Jun  7 14:51:19 2008
New Revision: 664401

URL: http://svn.apache.org/viewvc?rev=664401&view=rev
Log:
refactor HtmlTableRendererBase.java and add ExecuteOnCallback.java, as in shared 2.0.x

Added:
    myfaces/shared/trunk_3.0.x/core/src/main/java/org/apache/myfaces/shared/component/ExecuteOnCallback.java   (with props)
Modified:
    myfaces/shared/trunk_3.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTableRendererBase.java

Added: myfaces/shared/trunk_3.0.x/core/src/main/java/org/apache/myfaces/shared/component/ExecuteOnCallback.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_3.0.x/core/src/main/java/org/apache/myfaces/shared/component/ExecuteOnCallback.java?rev=664401&view=auto
==============================================================================
--- myfaces/shared/trunk_3.0.x/core/src/main/java/org/apache/myfaces/shared/component/ExecuteOnCallback.java (added)
+++ myfaces/shared/trunk_3.0.x/core/src/main/java/org/apache/myfaces/shared/component/ExecuteOnCallback.java Sat Jun  7 14:51:19 2008
@@ -0,0 +1,18 @@
+package org.apache.myfaces.shared.component;
+
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+
+/**
+ * With findComponent - you get a component, but this component might
+ * not be prepared to actually have the correct context information. This
+ * is important for e.g. DataTables. They'll need to prepare the component
+ * with the current row-state to make sure that the method is executed
+ * correctly.
+ *
+ * @author Martin Marinschek (latest modification by $Author$)
+ */
+public interface ExecuteOnCallback
+{
+    Object execute(FacesContext context, UIComponent component);
+}

Propchange: myfaces/shared/trunk_3.0.x/core/src/main/java/org/apache/myfaces/shared/component/ExecuteOnCallback.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/shared/trunk_3.0.x/core/src/main/java/org/apache/myfaces/shared/component/ExecuteOnCallback.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: myfaces/shared/trunk_3.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTableRendererBase.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_3.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTableRendererBase.java?rev=664401&r1=664400&r2=664401&view=diff
==============================================================================
--- myfaces/shared/trunk_3.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTableRendererBase.java (original)
+++ myfaces/shared/trunk_3.0.x/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlTableRendererBase.java Sat Jun  7 14:51:19 2008
@@ -106,16 +106,23 @@
     {
         RendererUtils.checkParamValidity(facesContext, uiComponent, UIData.class);
 
-        ResponseWriter writer = facesContext.getResponseWriter();
-
         beforeTable(facesContext, (UIData) uiComponent);
 
-        HtmlRendererUtils.writePrettyLineSeparator(facesContext);
-        writer.startElement(HTML.TABLE_ELEM, uiComponent);
-        HtmlRendererUtils.writeIdIfNecessary(writer, uiComponent, facesContext);
-        HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent, org.apache.myfaces.shared.renderkit.html.HTML.TABLE_PASSTHROUGH_ATTRIBUTES);
+		startTable(facesContext, uiComponent);
     }
 
+	/**
+	 * actually render the start of the table
+	 */
+	protected void startTable(FacesContext facesContext, UIComponent uiComponent) throws IOException
+	{
+		ResponseWriter writer = facesContext.getResponseWriter();
+		HtmlRendererUtils.writePrettyLineSeparator(facesContext);
+		writer.startElement(HTML.TABLE_ELEM, uiComponent);
+		HtmlRendererUtils.writeIdIfNecessary(writer, uiComponent, facesContext);
+		HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent, org.apache.myfaces.shared.renderkit.html.HTML.TABLE_PASSTHROUGH_ATTRIBUTES);
+	}
+
     /**
      * Render the TBODY section of the html table. See also method encodeInnerHtml.
      * 
@@ -554,13 +561,21 @@
     {
         RendererUtils.checkParamValidity(facesContext, uiComponent, UIData.class);
 
-        ResponseWriter writer = facesContext.getResponseWriter();
-        writer.endElement(HTML.TABLE_ELEM);
-        HtmlRendererUtils.writePrettyLineSeparator(facesContext);
+		endTable(facesContext, uiComponent);
 
         afterTable(facesContext, (UIData) uiComponent);
     }
 
+	/**
+	 * actually render the end of the table
+	 */
+	protected void endTable(FacesContext facesContext, UIComponent uiComponent) throws IOException
+	{
+		ResponseWriter writer = facesContext.getResponseWriter();
+		writer.endElement(HTML.TABLE_ELEM);
+		HtmlRendererUtils.writePrettyLineSeparator(facesContext);
+	}
+
     /**
      * Renders either the header or the footer facets for the UIData component
      * and all the child UIColumn components, as a THEAD or TFOOT element
@@ -609,11 +624,14 @@
         {
             // Header or Footer present on either the UIData or a column, so we
             // definitely need to render the THEAD or TFOOT section.
-            String elemName = header ? HTML.THEAD_ELEM : HTML.TFOOT_ELEM;
+            String elemName = determineHeaderFooterTag(facesContext, component, header);
 
             HtmlRendererUtils.writePrettyLineSeparator(facesContext);
-            writer.startElement(elemName, component);
-            if (header)
+			if (elemName != null)
+			{
+				writer.startElement(elemName, component);
+			}
+			if (header)
             {
                 String headerStyleClass = getHeaderClass(component);
                 if (facet != null)
@@ -629,10 +647,18 @@
                 if (facet != null)
                     renderTableFooterRow(facesContext, writer, component, facet, footerStyleClass, colspan);
             }
-            writer.endElement(elemName);
-        }
+			if (elemName != null)
+			{
+	            writer.endElement(elemName);
+			}
+		}
     }
 
+	protected String determineHeaderFooterTag(FacesContext facesContext, UIComponent component, boolean header)
+	{
+		return header ? HTML.THEAD_ELEM : HTML.TFOOT_ELEM;
+	}
+
     /**
      * @param header
      * @param uiComponent
@@ -681,7 +707,7 @@
     protected void renderTableHeaderRow(FacesContext facesContext, ResponseWriter writer, UIComponent component,
             UIComponent headerFacet, String headerStyleClass, int colspan) throws IOException
     {
-        renderTableHeaderOrFooterRow(facesContext, writer, component, headerFacet, headerStyleClass, HTML.TH_ELEM,
+        renderTableHeaderOrFooterRow(facesContext, writer, component, headerFacet, headerStyleClass, determineHeaderCellTag(facesContext, component),
                 colspan, true);
     }
 
@@ -734,13 +760,13 @@
         renderColumnHeaderOrFooterRow(facesContext, writer, component, footerStyleClass, false);
     }
 
-    private void renderTableHeaderOrFooterRow(FacesContext facesContext, ResponseWriter writer, UIComponent component,
+    protected void renderTableHeaderOrFooterRow(FacesContext facesContext, ResponseWriter writer, UIComponent component,
             UIComponent facet, String styleClass, String colElementName, int colspan, boolean isHeader) throws IOException
     {
         HtmlRendererUtils.writePrettyLineSeparator(facesContext);
         writer.startElement(HTML.TR_ELEM, component);
         writer.startElement(colElementName, component);
-        if (colElementName.equals(HTML.TH_ELEM) && isHeader)
+        if (colElementName.equals(determineHeaderCellTag(facesContext, component)) && isHeader)
         {
             writer.writeAttribute(HTML.SCOPE_ATTR, HTML.SCOPE_COLGROUP_VALUE, null);
         }
@@ -893,7 +919,7 @@
     protected void renderColumnHeaderCell(FacesContext facesContext, ResponseWriter writer, UIComponent uiComponent,
             UIComponent facet, String headerStyleClass, int colspan) throws IOException
     {
-        writer.startElement(HTML.TH_ELEM, uiComponent);
+        writer.startElement(determineHeaderCellTag(facesContext, uiComponent.getParent()), uiComponent);
         if (colspan > 1)
         {
             writer.writeAttribute(HTML.COLSPAN_ATTR, new Integer(colspan), null);
@@ -909,10 +935,14 @@
         {
             RendererUtils.renderChild(facesContext, facet);
         }
-
-        writer.endElement(HTML.TH_ELEM);
+        writer.endElement(determineHeaderCellTag(facesContext, uiComponent.getParent()));
     }
 
+	protected String determineHeaderCellTag(FacesContext facesContext, UIComponent uiComponent)
+	{
+		return HTML.TH_ELEM;
+	}
+
     /**
      * Renders the footer facet for the given <code>UIColumn</code>.
      * @param facesContext the <code>FacesContext</code>.