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>.