[richfaces-svn-commits] JBoss Rich Faces SVN: r2205 - in trunk: framework/impl/src/main/java/org/richfaces/renderkit and 2 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Fri Aug 10 13:26:28 EDT 2007


Author: nbelaevski
Date: 2007-08-10 13:26:28 -0400 (Fri, 10 Aug 2007)
New Revision: 2205

Added:
   trunk/framework/api/src/main/java/org/richfaces/component/TemplateComponent.java
Modified:
   trunk/framework/impl/src/main/java/org/richfaces/renderkit/TemplateEncoderRendererBase.java
   trunk/samples/calendar-sample/src/main/webapp/pages/Calendar.jsp
   trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java
Log:
- TemplateComponent class added
- Handling for TemplateComponent in Calendar component added
- Test case updated

Added: trunk/framework/api/src/main/java/org/richfaces/component/TemplateComponent.java
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/component/TemplateComponent.java	                        (rev 0)
+++ trunk/framework/api/src/main/java/org/richfaces/component/TemplateComponent.java	2007-08-10 17:26:28 UTC (rev 2205)
@@ -0,0 +1,18 @@
+/**
+ * 
+ */
+package org.richfaces.component;
+
+/**
+ * @author Nick Belaevski
+ *         mailto:nbelaevski at exadel.com
+ *         created 10.08.2007
+ *
+ */
+public interface TemplateComponent {
+	public static final String TEMPLATE_CLIENT_ID = "{componentId}";
+	
+	public void startTemplateEncode();
+	
+	public void endTemplateEncode();
+}

Modified: trunk/framework/impl/src/main/java/org/richfaces/renderkit/TemplateEncoderRendererBase.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/renderkit/TemplateEncoderRendererBase.java	2007-08-10 16:13:35 UTC (rev 2204)
+++ trunk/framework/impl/src/main/java/org/richfaces/renderkit/TemplateEncoderRendererBase.java	2007-08-10 17:26:28 UTC (rev 2205)
@@ -23,6 +23,7 @@
 import org.ajax4jsf.webapp.tidy.TidyParser;
 import org.ajax4jsf.webapp.tidy.TidyXMLFilter;
 import org.ajax4jsf.renderkit.HeaderResourcesRendererBase;
+import org.richfaces.component.TemplateComponent;
 import org.richfaces.json.JSContentHandler;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
@@ -99,13 +100,27 @@
 		StringWriter dumpingWriter = new StringWriter();
 		ResponseWriter clonedWriter = writer.cloneWithWriter(dumpingWriter);
 		context.setResponseWriter(clonedWriter);
+		
+		TemplateComponent templateComponent = null;
+		if (component instanceof TemplateComponent) {
+			templateComponent = (TemplateComponent) component;
+		}
+		
 		try {
+			if (templateComponent != null) {
+				templateComponent.startTemplateEncode();
+			}
+			
 			if (children) {
 				this.renderChildren(context, component);
 			} else {
 				this.renderChild(context, component);
 			}
 		} finally {
+			if (templateComponent != null) {
+				templateComponent.endTemplateEncode();
+			}
+
 			clonedWriter.flush();
 			context.setResponseWriter(writer);
 		}

Modified: trunk/samples/calendar-sample/src/main/webapp/pages/Calendar.jsp
===================================================================
--- trunk/samples/calendar-sample/src/main/webapp/pages/Calendar.jsp	2007-08-10 16:13:35 UTC (rev 2204)
+++ trunk/samples/calendar-sample/src/main/webapp/pages/Calendar.jsp	2007-08-10 17:26:28 UTC (rev 2205)
@@ -50,7 +50,7 @@
 					
 					<f:validator validatorId="org.richfaces.CalendarValidator" />
 					
-					<h:panelGrid columns="2">
+					<h:panelGrid columns="2" id="dayTable">
 						<f:verbatim><p style="padding: 2px;" <%-- class="largeText"--%>>{day}</p></f:verbatim>
 						<%-- h:panelGrid>
 							<h:outputText styleClass="smallText" value="{data.enLabel}" />

Modified: trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java
===================================================================
--- trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java	2007-08-10 16:13:35 UTC (rev 2204)
+++ trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java	2007-08-10 17:26:28 UTC (rev 2205)
@@ -32,6 +32,8 @@
 import java.util.TimeZone;
 
 import javax.faces.application.FacesMessage;
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIComponent;
 import javax.faces.component.UIInput;
 import javax.faces.component.UIViewRoot;
 import javax.faces.context.FacesContext;
@@ -57,7 +59,7 @@
  * JSF component class
  * 
  */
-public abstract class UICalendar extends UIInput {
+public abstract class UICalendar extends UIInput implements TemplateComponent, NamingContainer {
 
 	public static final String COMPONENT_TYPE = "org.richfaces.Calendar";
 
@@ -279,6 +281,31 @@
 
 	}
 
+	private transient boolean inTemplateEncode = false;
+	
+	public void startTemplateEncode() {
+		if (getChildCount() > 0) {
+			Iterator children = getChildren().iterator();
+			while (children.hasNext()) {
+				UIComponent child = (UIComponent) children.next();
+				child.setId(child.getId());
+			}
+		}
+		inTemplateEncode = true;
+	}
+	
+	public void endTemplateEncode() {
+		inTemplateEncode = false;
+	}
+	
+	public String getClientId(FacesContext context) {
+		if (inTemplateEncode) {
+			return TemplateComponent.TEMPLATE_CLIENT_ID;
+		} else {
+			return super.getClientId(context);
+		}
+	}
+	
 	public void broadcast(FacesEvent event) throws AbortProcessingException {
 		// TODO Auto-generated method stub
 		if (event instanceof AjaxEvent) {




More information about the richfaces-svn-commits mailing list