Author: dmorozov
Date: 2008-07-21 04:46:16 -0400 (Mon, 21 Jul 2008)
New Revision: 9700
Modified:
trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java
trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java
trunk/ui/dataTable/src/main/templates/org/richfaces/htmlDataTable.jspx
Log:
https://jira.jboss.org/jira/browse/RF-3841
Modified: trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java
===================================================================
--- trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java 2008-07-21
08:39:43 UTC (rev 9699)
+++ trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java 2008-07-21
08:46:16 UTC (rev 9700)
@@ -21,6 +21,7 @@
package org.richfaces.component;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
@@ -28,27 +29,35 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import javax.el.ELContext;
import javax.el.ELException;
import javax.el.ValueExpression;
import javax.faces.FacesException;
+import javax.faces.component.NamingContainer;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.Renderer;
+import org.ajax4jsf.component.AjaxChildrenEncoder;
import org.ajax4jsf.component.SequenceDataAdaptor;
+import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.model.ExtendedDataModel;
+import org.ajax4jsf.renderkit.AjaxChildrenRenderer;
import org.richfaces.model.AbstractModifiableModel;
import org.richfaces.model.FilterField;
import org.richfaces.model.ModifiableModel;
import org.richfaces.model.SortField2;
+import org.richfaces.renderkit.AbstractTableRenderer;
/**
* JSF component class
*
*/
-public abstract class UIDataTable extends SequenceDataAdaptor implements Sortable2,
Filterable{
+public abstract class UIDataTable extends SequenceDataAdaptor implements Sortable2,
Filterable, AjaxChildrenEncoder {
Collection<Object> sortPriority = new ArrayList<Object>();
@@ -181,5 +190,25 @@
sortPriority = (Collection<Object>)states[1];
}
+ @Override
+ public void encodeAjaxChild(FacesContext context,
+ String path,Set<String> ids,Set<String> renderedAreas) throws
IOException {
+
+ if (this.isRendered()) {
+ Renderer renderer = this.getRenderer(context);
+ if (renderer instanceof AbstractTableRenderer) {
+ AbstractTableRenderer r = (AbstractTableRenderer) renderer;
+ AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
+ r.encodeTBodyAjax(context, this);
+ ajaxContext.getAjaxRenderedAreas().add(this.getClientId(context) + ":tb");
+ }
+
+ AjaxChildrenRenderer childrenRenderer = getChildrenRenderer();
+ String childsPath = path + getId() + NamingContainer.SEPARATOR_CHAR;
+ for (UIComponent component : getFacets().values()) {
+ childrenRenderer.encodeAjaxComponent(context, component, childsPath, ids,
renderedAreas);
+ }
+ }
+ }
}
\ No newline at end of file
Modified:
trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java
===================================================================
---
trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java 2008-07-21
08:39:43 UTC (rev 9699)
+++
trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java 2008-07-21
08:46:16 UTC (rev 9700)
@@ -26,7 +26,6 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import javax.faces.component.UIColumn;
import javax.faces.component.UIComponent;
@@ -57,6 +56,37 @@
private static final String FILTER_INPUT_FACET_NAME = "filterValueInput";
/**
+ * Encode data table body
+ * @param context
+ * @param table
+ * @throws IOException
+ */
+ public void encodeTBody (FacesContext context, UIDataTable table) throws IOException {
+ String clientId = table.getClientId(context);
+ ResponseWriter writer = context.getResponseWriter();
+ writer.startElement("tbody", table);
+ writer.writeAttribute("id", clientId + ":tb", null);
+
+ encodeRows(context, table);
+
+ writer.endElement("tbody");
+ }
+
+ /**
+ * Helper method for rendering data table tBody only.
+ * For HTML consistency it wrap tBody with extra fake "table" tag
+ * @param context
+ * @param table
+ * @throws IOException
+ */
+ public void encodeTBodyAjax (FacesContext context, UIDataTable table) throws IOException
{
+ ResponseWriter writer = context.getResponseWriter();
+ writer.startElement("table", table);
+ encodeTBody(context, table);
+ writer.endElement("table");
+ }
+
+ /**
* Encode all table structure - colgroups definitions, caption, header,
* footer
*
@@ -64,7 +94,6 @@
* @param table
* @throws IOException
*/
-
public void encodeTableStructure(FacesContext context, UIDataTable table)
throws IOException {
ResponseWriter writer = context.getResponseWriter();
@@ -515,23 +544,12 @@
}
}
+
AjaxContext ajaxContext = AjaxContext.getCurrentInstance();
- ajaxContext.addComponentToAjaxRender(component);
- ajaxContext.addRenderedArea(clientId+ ":tb");
ajaxContext.addRegionsFromComponent(component);
}
}
- @Override
- public void encodeEnd(FacesContext context, UIComponent component)
- throws IOException {
- super.encodeEnd(context, component);
- String clientId = component.getClientId(context);
- Set<String> ajaxRenderedAreas =
AjaxContext.getCurrentInstance().getAjaxRenderedAreas();
- if(ajaxRenderedAreas.contains(clientId+ ":tb")) {
- ajaxRenderedAreas.remove(clientId);
- }
- }
protected void addInplaceInput(FacesContext context, UIComponent column,
String buffer) throws IOException {
UIInput filterValueInput = (UIInput) column
Modified: trunk/ui/dataTable/src/main/templates/org/richfaces/htmlDataTable.jspx
===================================================================
--- trunk/ui/dataTable/src/main/templates/org/richfaces/htmlDataTable.jspx 2008-07-21
08:39:43 UTC (rev 9699)
+++ trunk/ui/dataTable/src/main/templates/org/richfaces/htmlDataTable.jspx 2008-07-21
08:46:16 UTC (rev 9700)
@@ -20,17 +20,16 @@
</h:scripts>
<f:clientid var="clientId"/>
<table id="#{clientId}"
- class="dr-table rich-table #{component.attributes['styleClass']}"
style="#{component.attributes['style']}"
- >
+ class="dr-table rich-table #{component.attributes['styleClass']}"
style="#{component.attributes['style']}" >
<f:call name="utils.encodePassThruWithExclusions">
<f:parameter value="value,name,type,id,class,rows,style" />
</f:call>
- <f:call name="encodeTableStructure"/>
- <tbody id="#{clientId}:tb">
- <vcp:body>
- <f:call name="encodeRows"/>
- </vcp:body>
- </tbody>
+
+ <f:call name="encodeTableStructure"/>
+
+ <vcp:body>
+ <f:call name="encodeTBody"/>
+ </vcp:body>
</table>
</f:root>
\ No newline at end of file