You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by gv...@apache.org on 2005/09/30 03:14:33 UTC

svn commit: r292595 [1/2] - in /struts/shale/trunk: clay-plugin/src/conf/ clay-plugin/src/java/org/apache/shale/clay/ clay-plugin/src/java/org/apache/shale/clay/component/ clay-plugin/src/java/org/apache/shale/clay/component/chain/ clay-plugin/src/java...

Author: gvanmatre
Date: Thu Sep 29 18:14:12 2005
New Revision: 292595

URL: http://svn.apache.org/viewcvs?rev=292595&view=rev
Log:
Refactored the clay component attributes making it more explicit.

Added:
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyConverterCommand.java
Modified:
    struts/shale/trunk/clay-plugin/src/conf/clay-config_1_0.dtd
    struts/shale/trunk/clay-plugin/src/conf/view-config.xml
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/Clay.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AssignPropertiesCommand.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyActionListenerCommand.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyValidatorCommand.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyValueChangeListenerCommand.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/shale-clay-config.xml
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/Globals.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/AttributeBean.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentBean.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/faces/ClayViewHandler.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/faces/ClayViewHandlerCommand.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/builder/Builder.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/builder/IgnoreBuilder.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/builder/SelectItemBuilder.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/builder/SelectManyMenuBuilder.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/builder/SelectOneMenuBuilder.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/parser/builder/VerbatimBuilder.java
    struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/utils/ClayAmalgam.java
    struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/ConfigTestCase.java
    struts/shale/trunk/clay-plugin/src/test/org/apache/shale/clay/config/address-config.xml
    struts/shale/trunk/use-cases/src/java/org/apache/shale/usecases/rolodex/Rolodex.java
    struts/shale/trunk/use-cases/src/java/org/apache/shale/usecases/view/Bundle.properties
    struts/shale/trunk/use-cases/src/web/WEB-INF/clay-config.xml
    struts/shale/trunk/use-cases/src/web/WEB-INF/faces-config.xml
    struts/shale/trunk/use-cases/src/web/rolodex/hrolodex.html
    struts/shale/trunk/use-cases/src/web/rolodex/xhrolodex.html
    struts/shale/trunk/use-cases/src/web/usecases.jsp

Modified: struts/shale/trunk/clay-plugin/src/conf/clay-config_1_0.dtd
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/conf/clay-config_1_0.dtd?rev=292595&r1=292594&r2=292595&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/conf/clay-config_1_0.dtd (original)
+++ struts/shale/trunk/clay-plugin/src/conf/clay-config_1_0.dtd Thu Sep 29 18:14:12 2005
@@ -33,6 +33,17 @@
 
 -->
 
+<!--
+   The BindingType enumeration defines how Expression Language (EL) binding is 
+   handled.
+   VB - Use Value Binding
+   MB - Use Method Binding
+   None - No use of EL.  The value passes through
+   Early - EL evaluated before setting the component property/attribute.  
+-->
+<!ENTITY % BindingType "(VB|MB|None|Early)">
+
+
 <!--Boolean enumeration as two values that correspond to a boolean primitive data type-->
 <!ENTITY % Boolean "(true|false)">
 
@@ -55,24 +66,17 @@
   name - The attribute name that corresponds to a component property.  The parent "attributes" node
          container can be inherited.  The "name" attribute acts as the "method signature" when 
          resolving inheritance.
-         
-  useMethodLateBinding - This attribute informs the Clay component to pass a MethodBinding object to
-         to the component.  Currently all the standard method binding events, "action", "actionListener", 
-         "validator" and "valueChangeListner" are handled. This attribute is meant to be used by a custom 
-         component that has a non-standard attribute name for binding a method event.
-
-  useValueLateBinding - When this attribute is toggled on with a "true" value, the Clay component will pass 
-         a ValueBinding object to the component; otherwise, the component will receive the resulting value.  
-         The resulting value can be a literal or a expression language binding expression. 
   
+  bindingType - This attribute is of BindingType.  It indicates the contract that a component 
+         property/attribute has with the proper use of EL.
+                  
   value - This attribute holds the value of the named attribute. A literal string value or a dynamic bound 
          expression.  
 -->
 <!ELEMENT set EMPTY>
 <!ATTLIST set
 	name CDATA #REQUIRED
-	useMethodLateBinding %Boolean; #IMPLIED
-	useValueLateBinding %Boolean; #IMPLIED
+	bindingType %BindingType; #IMPLIED
     value CDATA #IMPLIED
 >
 

Modified: struts/shale/trunk/clay-plugin/src/conf/view-config.xml
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/conf/view-config.xml?rev=292595&r1=292594&r2=292595&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/conf/view-config.xml (original)
+++ struts/shale/trunk/clay-plugin/src/conf/view-config.xml Thu Sep 29 18:14:12 2005
@@ -23,6 +23,76 @@
       "-//Apache Software Foundation//DTD Shale Clay View Configuration 1.0//EN"
       "http://struts.apache.org/dtds/shale-clay-config_1_0.dtd">
 <view>
+   <component jsfid="baseHtml" componentType="override">
+      <attributes>
+        <set name="rendered" bindingType="VB" />
+        
+        <!-- HTML 4.0 universal attributes -->
+        <set name="dir" bindingType="VB" />  
+        <set name="lang" bindingType="VB" />  
+        <set name="style" bindingType="VB" />  
+        <set name="title" bindingType="VB" />  
+        <set name="styleClass" bindingType="VB" /> 
+        
+        <!-- HTML 4.0 event-handler attributes --> 
+        <set name="onclick" bindingType="VB" />  
+        <set name="ondblclick" bindingType="VB" />  
+        <set name="onmousedown" bindingType="VB" />  
+        <set name="onmouseup" bindingType="VB" />  
+        <set name="onmouseover" bindingType="VB" />  
+        <set name="onmouseover" bindingType="VB" />  
+        <set name="onmousemove" bindingType="VB" />  
+        <set name="onmouseout" bindingType="VB" />  
+        <set name="onkeypress" bindingType="VB" />  
+        <set name="onkeydown" bindingType="VB" />  
+        <set name="onkeyup" bindingType="VB" />  
+      </attributes>
+   </component>
+   
+   
+   <component jsfid="baseInput" extends="baseHtml">
+      <attributes>
+        <!-- HTML 4.0 input attributes -->
+        <set name="accesskey" bindingType="VB" />
+        <set name="align" bindingType="VB" />
+        <set name="alt" bindingType="VB" />
+        <set name="datafld" bindingType="VB" />
+        <set name="datasrc" bindingType="VB" />
+        <set name="dataformatas" bindingType="VB" />
+        <set name="disabled" bindingType="VB" />
+        <set name="onblur" bindingType="VB" />
+        <set name="onchange" bindingType="VB" />
+        <set name="onfocus" bindingType="VB" />
+        <set name="readonly" bindingType="VB" />
+        <set name="onselect" bindingType="VB" />
+        <set name="tabindex" bindingType="VB" />
+        
+        <set name="value" bindingType="VB" />
+        <set name="converter" bindingType="VB" />
+        <set name="immediate" bindingType="VB" />
+        <set name="validator" bindingType="MB" />
+        <set name="valueChangeListener" bindingType="MB" />
+        
+      </attributes>
+   </component>
+   
+   <component jsfid="baseOutput" extends="baseHtml">
+     <attributes>
+        <set name="value" bindingType="VB" />
+        <set name="converter" bindingType="VB" /> 
+     </attributes>
+  </component>
+  
+   <component jsfid="baseAction" extends="baseHtml">
+      <attributes>
+        <!-- UIComponent attributes -->
+        <set name="action" bindingType="MB" /> 
+        <set name="actionListener" bindingType="MB" /> 
+        <set name="immediate" bindingType="VB" /> 
+        <set name="value" bindingType="VB" />  
+     </attributes>
+   </component>
+   
    <!-- 
       The "Token" component emits a transactional token that is then
       validated (on a subsequent form submit) to catch cases where the
@@ -30,23 +100,23 @@
     -->
   <component jsfid="token" id="token" componentType="org.apache.shale.Token" allowBody="false">
       <attributes>
-        <set name="rendered" useValueLateBinding="true" />
+        <set name="rendered" bindingType="VB" />
       </attributes>
   </component>
 
   <!--  Provides access to Commons Validators  -->
   <component jsfid="commonsValidator" id="commonsValidator" componentType="org.apache.shale.CommonsValidator" allowBody="false">
       <attributes>
-        <set name="type" useValueLateBinding="true" />
-        <set name="min" useValueLateBinding="true" />
-        <set name="max" useValueLateBinding="true" />
-        <set name="minlength" useValueLateBinding="true" />
-        <set name="maxlength" useValueLateBinding="true" />
-        <set name="mask" useValueLateBinding="true" />
-        <set name="message" useValueLateBinding="true" />
-        <set name="arg" useValueLateBinding="true" />
-        <set name="client" useValueLateBinding="true" />
-        <set name="server" useValueLateBinding="true" />
+        <set name="type" bindingType="Early" />
+        <set name="min" bindingType="Early" />
+        <set name="max" bindingType="Early" />
+        <set name="minlength" bindingType="Early" />
+        <set name="maxlength" bindingType="Early" />
+        <set name="mask" bindingType="Early" />
+        <set name="message" bindingType="Early" />
+        <set name="arg" bindingType="Early" />
+        <set name="client" bindingType="Early" />
+        <set name="server" bindingType="Early" />
       </attributes>
   </component>
 
@@ -55,47 +125,24 @@
   -->
   <component jsfid="subview" id="subview" componentType="org.apache.shale.Subview" allowBody="true">
       <attributes>
-        <set name="rendered" useValueLateBinding="true" />
+        <set name="rendered" bindingType="VB" />
       </attributes>
   </component>
 
   <!-- Generates JavaScript for client-side validation  -->
   <component jsfid="validatorScript" id="validatorScript" componentType="org.apache.shale.ValidatorScript" allowBody="false">
       <attributes>
-        <set name="functionName" useValueLateBinding="true" />
+        <set name="functionName" bindingType="None" />
       </attributes>
   </component>
 
   <!-- 
      Render readonly text
    -->
-  <component jsfid="outputText" componentType="javax.faces.HtmlOutputText">
+  <component jsfid="outputText" componentType="javax.faces.HtmlOutputText" extends="baseHtml">
     <attributes>
-        <set name="value" useValueLateBinding="true" />  
-        <set name="rendered" useValueLateBinding="true" />
-      
-        <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" />  
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" />  
-
-        <set name="escape" useValueLateBinding="true" />  
-    
+        <set name="value" bindingType="VB" />        
+        <set name="escape" bindingType="VB" />  
     </attributes>
   </component>
  
@@ -104,9 +151,9 @@
    -->   
   <component jsfid="parameter" componentType="javax.faces.Parameter">
     <attributes>
-      <set name="rendered" useValueLateBinding="true" />
-      <set name="name" useValueLateBinding="true" />
-      <set name="value" useValueLateBinding="true" />
+      <set name="rendered" bindingType="VB" />
+      <set name="name" bindingType="VB" />
+      <set name="value" bindingType="VB" />
     </attributes>  
   </component>
   <component jsfid="param" extends="parameter"/>
@@ -116,11 +163,11 @@
    -->
   <component jsfid="selectItem" componentType="javax.faces.SelectItem">
     <attributes>
-      <set name="itemDisabled" useValueLateBinding="true" />
-      <set name="itemDescription" useValueLateBinding="true" />
-      <set name="itemLabel" useValueLateBinding="true" />
-      <set name="itemValue" useValueLateBinding="true" />
-      <set name="value" useValueLateBinding="true" />
+      <set name="itemDisabled" bindingType="VB" />
+      <set name="itemDescription" bindingType="VB" />
+      <set name="itemLabel" bindingType="VB" />
+      <set name="itemValue" bindingType="VB" />
+      <set name="value" bindingType="VB" />
     </attributes>  
   
   </component>
@@ -130,9 +177,9 @@
    -->
   <component jsfid="verbatim" componentType="javax.faces.HtmlOutputText">
     <attributes>
-      <set name="escape" useValueLateBinding="true" />
-      <set name="isTransient" useValueLateBinding="false" value="true" />
-      <set name="value" useValueLateBinding="true" />       
+      <set name="escape" bindingType="VB" />
+      <set name="isTransient" bindingType="VB" value="true" />
+      <set name="value" bindingType="VB" />       
     </attributes>
   </component>
   <!-- acts like a comment tag treating child nodes as verbatim -->
@@ -145,483 +192,85 @@
    -->
   <component jsfid="selectItems" componentType="javax.faces.SelectItems">
     <attributes>
-      <set name="value" useValueLateBinding="true" />
+      <set name="value" bindingType="VB" />
     </attributes>
   </component>
   
   <!-- 
       Render a set of html "input" elements of type "radio".
    -->
-  <component jsfid="selectOneRadio" componentType="javax.faces.HtmlSelectOneRadio">
-      <attributes>
-        <set name="rendered" useValueLateBinding="true" />
-        <set name="value" useValueLateBinding="true" />
-        <set name="converter" useValueLateBinding="true" />
-        <set name="immediate" useValueLateBinding="true" />
-        <set name="validator" useMethodLateBinding="true" />
-        <set name="valueChangeListener" useMethodLateBinding="true" />
-        
-        <!-- HTML 4.0 input attributes -->
-        <set name="accesskey" useValueLateBinding="true" />
-        <set name="align" useValueLateBinding="true" />
-        <set name="alt" useValueLateBinding="true" />
-        <set name="datafld" useValueLateBinding="true" />
-        <set name="datasrc" useValueLateBinding="true" />
-        <set name="dataformatas" useValueLateBinding="true" />
-        <set name="disabled" useValueLateBinding="true" />
-        <set name="onblur" useValueLateBinding="true" />
-        <set name="onchange" useValueLateBinding="true" />
-        <set name="onfocus" useValueLateBinding="true" />
-        <set name="readonly" useValueLateBinding="true" />
-        <set name="onselect" useValueLateBinding="true" />
-        <set name="tabindex" useValueLateBinding="true" />
- 
-         <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" /> 
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" /> 
-        
-        <set name="layout" useValueLateBinding="true" /> 
-        <set name="border" useValueLateBinding="true" /> 
-        
+  <component jsfid="selectOneRadio" componentType="javax.faces.HtmlSelectOneRadio" extends="baseInput">
+      <attributes>      
+        <set name="layout" bindingType="VB" /> 
+        <set name="border" bindingType="VB" /> 
       </attributes>
   </component>
 
   <!-- 
       Render a "select" element without a multiple attribute.
    -->  
-  <component jsfid="selectOneMenu" componentType="javax.faces.HtmlSelectOneMenu">
-      <attributes>
-        <set name="rendered" useValueLateBinding="true" />
-        <set name="value" useValueLateBinding="true" />
-        <set name="converter" useValueLateBinding="true" />
-        <set name="immediate" useValueLateBinding="true" />
-        <set name="validator" useMethodLateBinding="true" />
-        <set name="valueChangeListener" useMethodLateBinding="true" />
-        
-        <!-- HTML 4.0 input attributes -->
-        <set name="accesskey" useValueLateBinding="true" />
-        <set name="align" useValueLateBinding="true" />
-        <set name="alt" useValueLateBinding="true" />
-        <set name="datafld" useValueLateBinding="true" />
-        <set name="datasrc" useValueLateBinding="true" />
-        <set name="dataformatas" useValueLateBinding="true" />
-        <set name="disabled" useValueLateBinding="true" />
-        <set name="onblur" useValueLateBinding="true" />
-        <set name="onchange" useValueLateBinding="true" />
-        <set name="onfocus" useValueLateBinding="true" />
-        <set name="readonly" useValueLateBinding="true" />
-        <set name="onselect" useValueLateBinding="true" />
-        <set name="tabindex" useValueLateBinding="true" />
+  <component jsfid="selectOneMenu" componentType="javax.faces.HtmlSelectOneMenu" extends="baseInput"/>
  
-         <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" /> 
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" /> 
-      </attributes>
-
-  </component>
 
   <!-- 
       Render a "select" element with a multiple attribute.
    -->    
-  <component jsfid="selectManyMenu" componentType="javax.faces.HtmlSelectManyMenu">
-      <attributes>
-        <set name="rendered" useValueLateBinding="true" />
-        <set name="value" useValueLateBinding="true" />
-        <set name="converter" useValueLateBinding="true" />
-        <set name="immediate" useValueLateBinding="true" />
-        <set name="validator" useMethodLateBinding="true" />
-        <set name="valueChangeListener" useMethodLateBinding="true" />
-        
-        <!-- HTML 4.0 input attributes -->
-        <set name="accesskey" useValueLateBinding="true" />
-        <set name="align" useValueLateBinding="true" />
-        <set name="alt" useValueLateBinding="true" />
-        <set name="datafld" useValueLateBinding="true" />
-        <set name="datasrc" useValueLateBinding="true" />
-        <set name="dataformatas" useValueLateBinding="true" />
-        <set name="disabled" useValueLateBinding="true" />
-        <set name="onblur" useValueLateBinding="true" />
-        <set name="onchange" useValueLateBinding="true" />
-        <set name="onfocus" useValueLateBinding="true" />
-        <set name="readonly" useValueLateBinding="true" />
-        <set name="onselect" useValueLateBinding="true" />
-        <set name="tabindex" useValueLateBinding="true" />
- 
-         <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" /> 
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" /> 
-      </attributes>
-  </component>
+  <component jsfid="selectManyMenu" componentType="javax.faces.HtmlSelectManyMenu" extends="baseInput"/>
 
   <!-- 
       Render a set of html "input" elements of type "checkbox".
    -->  
-  <component jsfid="manySelectCheckbox" componentType="javax.faces.HtmlSelectManyCheckbox">
+  <component jsfid="manySelectCheckbox" componentType="javax.faces.HtmlSelectManyCheckbox" extends="baseInput">
       <attributes>
-        <set name="rendered" useValueLateBinding="true" />
-        <set name="value" useValueLateBinding="true" />
-        <set name="converter" useValueLateBinding="true" />
-        <set name="immediate" useValueLateBinding="true" />
-        <set name="validator" useMethodLateBinding="true" />
-        <set name="valueChangeListener" useMethodLateBinding="true" />
-        
-        <!-- HTML 4.0 input attributes -->
-        <set name="accesskey" useValueLateBinding="true" />
-        <set name="align" useValueLateBinding="true" />
-        <set name="alt" useValueLateBinding="true" />
-        <set name="datafld" useValueLateBinding="true" />
-        <set name="datasrc" useValueLateBinding="true" />
-        <set name="dataformatas" useValueLateBinding="true" />
-        <set name="disabled" useValueLateBinding="true" />
-        <set name="onblur" useValueLateBinding="true" />
-        <set name="onchange" useValueLateBinding="true" />
-        <set name="onfocus" useValueLateBinding="true" />
-        <set name="readonly" useValueLateBinding="true" />
-        <set name="onselect" useValueLateBinding="true" />
-        <set name="tabindex" useValueLateBinding="true" />
- 
-         <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" /> 
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" /> 
-
-        <set name="layout" useValueLateBinding="true" /> 
-
+        <set name="layout" bindingType="VB" /> 
       </attributes>  
   </component>
 
   <!-- 
       Render a html "input" element of type "checkbox".
    -->    
-  <component jsfid="selectBooleanCheckbox" componentType="javax.faces.HtmlSelectBooleanCheckbox">
-      <attributes>
-        <set name="rendered" useValueLateBinding="true" />
-        <set name="value" useValueLateBinding="true" />
-        <set name="converter" useValueLateBinding="true" />
-        <set name="immediate" useValueLateBinding="true" />
-        <set name="validator" useMethodLateBinding="true" />
-        <set name="valueChangeListener" useMethodLateBinding="true" />
-        
-        <!-- HTML 4.0 input attributes -->
-        <set name="accesskey" useValueLateBinding="true" />
-        <set name="align" useValueLateBinding="true" />
-        <set name="alt" useValueLateBinding="true" />
-        <set name="datafld" useValueLateBinding="true" />
-        <set name="datasrc" useValueLateBinding="true" />
-        <set name="dataformatas" useValueLateBinding="true" />
-        <set name="disabled" useValueLateBinding="true" />
-        <set name="onblur" useValueLateBinding="true" />
-        <set name="onchange" useValueLateBinding="true" />
-        <set name="onfocus" useValueLateBinding="true" />
-        <set name="readonly" useValueLateBinding="true" />
-        <set name="onselect" useValueLateBinding="true" />
-        <set name="tabindex" useValueLateBinding="true" />
- 
-         <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" /> 
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" />  
-      
-      </attributes>
-  </component>
+  <component jsfid="selectBooleanCheckbox" componentType="javax.faces.HtmlSelectBooleanCheckbox" extends="baseInput"/>
 
   <!-- 
       Render a html "table" element.
    -->      
-  <component jsfid="panelGroup" componentType="javax.faces.HtmlPanelGroup">
-      <attributes>
-         <set name="rendered" useValueLateBinding="true" />
-         
-         <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" />  
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" />  
-      
-      </attributes> 
-  </component>
+  <component jsfid="panelGroup" componentType="javax.faces.HtmlPanelGroup" extends="baseHtml"/>
 
   <!-- 
       Render a html "a" element.
    -->        
-  <component jsfid="outputLink" componentType="javax.faces.HtmlOutputLink">
-     <attributes>
-        <set name="rendered" useValueLateBinding="true" />
-        <set name="value" useValueLateBinding="true" />
-        <set name="converter" useValueLateBinding="true" />
-      
-         <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" />  
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" />  
-     
-        <!-- HTML 4.0 anchor (=a) attributes -->
-        <set name="accesskey" useValueLateBinding="true" />  
-        <set name="charset" useValueLateBinding="true" />  
-        <set name="coords" useValueLateBinding="true" />  
-        <set name="hreflang" useValueLateBinding="true" />  
-        <set name="rel" useValueLateBinding="true" />  
-        <set name="rev" useValueLateBinding="true" />  
-        <set name="shape" useValueLateBinding="true" />  
-        <set name="tabindex" useValueLateBinding="true" />  
-        <set name="type" useValueLateBinding="true" />  
-        <set name="onblur" useValueLateBinding="true" />  
-        <set name="onfocus" useValueLateBinding="true" />  
-        <set name="target" useValueLateBinding="true" />  
-     
-     </attributes>
-  </component>
+  <component jsfid="outputLink" componentType="javax.faces.HtmlOutputLink" extends="baseOutput"/>
 
   <!-- 
       Render a html "label" element.
    -->          
-  <component jsfid="outputLabel" componentType="javax.faces.HtmlOutputLabel">
-       <attributes>
-        <set name="rendered" useValueLateBinding="true" />
-        <set name="value" useValueLateBinding="true" />
-        <set name="converter" useValueLateBinding="true" />
-      
-         <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" />  
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" />  
-      
-        <!-- HTML 4.0 label attributes -->
-        <set name="accesskey" useValueLateBinding="true" /> 
-        <set name="onblur" useValueLateBinding="true" /> 
-        <set name="onfocus" useValueLateBinding="true" /> 
-        <set name="for" useValueLateBinding="true" /> 
-        
-       </attributes>
+  <component jsfid="outputLabel" componentType="javax.faces.HtmlOutputLabel" extends="baseOutput" >
+     <attributes>
+        <set name="for" bindingType="VB" />      
+     </attributes>
+  
   </component>
   
    <!-- 
       Render a html "textarea" element.
    -->        
-  <component jsfid="inputTextarea" componentType="javax.faces.HtmlInputTextarea">
+  <component jsfid="inputTextarea" componentType="javax.faces.HtmlInputTextarea" extends="baseInput">
       <attributes>
-
-        <set name="rendered" useValueLateBinding="true" />
-        <set name="value" useValueLateBinding="true" />
-        <set name="converter" useValueLateBinding="true" />
-        <set name="immediate" useValueLateBinding="true" />
-        <set name="validator" useMethodLateBinding="true" />
-        <set name="valueChangeListener" useMethodLateBinding="true" />
-        
-        <!-- HTML 4.0 input attributes -->
-        <set name="accesskey" useValueLateBinding="true" />
-        <set name="align" useValueLateBinding="true" />
-        <set name="alt" useValueLateBinding="true" />
-        <set name="datafld" useValueLateBinding="true" />
-        <set name="datasrc" useValueLateBinding="true" />
-        <set name="dataformatas" useValueLateBinding="true" />
-        <set name="disabled" useValueLateBinding="true" />
-        <set name="onblur" useValueLateBinding="true" />
-        <set name="onchange" useValueLateBinding="true" />
-        <set name="onfocus" useValueLateBinding="true" />
-        <set name="readonly" useValueLateBinding="true" />
-        <set name="onselect" useValueLateBinding="true" />
-        <set name="rows" useValueLateBinding="true" />
-        <set name="tabindex" useValueLateBinding="true" />
- 
-         <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" /> 
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" />  
+        <set name="rows" bindingType="VB" />   
+        <set name="cols" bindingType="VB" />              
       </attributes>
   </component>
 
    <!-- 
       Render a html "input" element of type "password".
    -->        
-  <component jsfid="inputSecret" componentType="javax.faces.HtmlInputSecret">
+  <component jsfid="inputSecret" componentType="javax.faces.HtmlInputSecret" extends="baseInput">
       <attributes>
-        <set name="rendered" useValueLateBinding="true" />
-        <set name="value" useValueLateBinding="true" />
-        <set name="converter" useValueLateBinding="true" />
-        <set name="immediate" useValueLateBinding="true" />
-        <set name="validator" useMethodLateBinding="true" />
-        <set name="valueChangeListener" useMethodLateBinding="true" />
-        
-        <!-- HTML 4.0 input attributes -->
-        <set name="accesskey" useValueLateBinding="true" />
-        <set name="align" useValueLateBinding="true" />
-        <set name="alt" useValueLateBinding="true" />
-        <set name="datafld" useValueLateBinding="true" />
-        <set name="datasrc" useValueLateBinding="true" />
-        <set name="dataformatas" useValueLateBinding="true" />
-        <set name="disabled" useValueLateBinding="true" />
-        <set name="maxlength" useValueLateBinding="true" />
-        <set name="onblur" useValueLateBinding="true" />
-        <set name="onchange" useValueLateBinding="true" />
-        <set name="onfocus" useValueLateBinding="true" />
-        <set name="readonly" useValueLateBinding="true" />
-        <set name="onselect" useValueLateBinding="true" />
-        <set name="size" useValueLateBinding="true" />
-        <set name="tabindex" useValueLateBinding="true" />
- 
-         <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" /> 
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" />  
- 
          <!-- SecretRenderer attributes -->
-        <set name="redisplay" useValueLateBinding="true" />  
-        
+        <set name="redisplay" bindingType="Early" />
+        <set name="maxLength" bindingType="VB" />   
+        <set name="size" bindingType="VB" />                            
       </attributes>
-  
   </component>
 
   <!-- 
@@ -629,192 +278,100 @@
    -->          
   <component jsfid="inputHidden" componentType="javax.faces.HtmlInputHidden">
        <attributes>
-        <set name="rendered" useValueLateBinding="true" />
-        <set name="value" useValueLateBinding="true" />
+        <set name="rendered" bindingType="VB" />
+        <set name="value" bindingType="VB" />
         
-        <set name="converter" useValueLateBinding="true" />
-        <set name="immediate" useValueLateBinding="true" />
-        <set name="validator" useMethodLateBinding="true" />
-        <set name="valueChangeListener" useMethodLateBinding="true" />
+        <set name="converter" bindingType="VB" />
+        <set name="immediate" bindingType="VB" />
+        <set name="validator" bindingType="MB" />
+        <set name="valueChangeListener" bindingType="MB" />
        </attributes>  
   </component>
 
   <!-- 
       Render a html "img" element.
    -->            
-  <component jsfid="image" componentType="javax.faces.HtmlGraphicImage">
+  <component jsfid="image" componentType="javax.faces.HtmlGraphicImage" extends="baseHtml">
        <attributes>
-        <set name="rendered" useValueLateBinding="true" />
-        <set name="url" useValueLateBinding="true" />
-        <set name="value" useValueLateBinding="true" />
-
-        <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" /> 
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" />  
+        <set name="url" bindingType="VB" />
+        <set name="value" bindingType="VB" />
 
         <!-- HTML 4.0 img attributes -->
-        <set name="align" useValueLateBinding="true" />  
-        <set name="alt" useValueLateBinding="true" />  
-        <set name="border" useValueLateBinding="true" />  
-        <set name="height" useValueLateBinding="true" />  
-        <set name="hspace" useValueLateBinding="true" />  
-        <set name="ismap" useValueLateBinding="true" />  
-        <set name="longdesc" useValueLateBinding="true" />  
-        <set name="usemap" useValueLateBinding="true" />  
-        <set name="vspace" useValueLateBinding="true" />  
-        <set name="width" useValueLateBinding="true" />  
+        <set name="align" bindingType="VB" />  
+        <set name="alt" bindingType="VB" />  
+        <set name="border" bindingType="VB" />  
+        <set name="height" bindingType="VB" />  
+        <set name="hspace" bindingType="VB" />  
+        <set name="ismap" bindingType="VB" />  
+        <set name="longdesc" bindingType="VB" />  
+        <set name="usemap" bindingType="VB" />  
+        <set name="vspace" bindingType="VB" />  
+        <set name="width" bindingType="VB" />  
        </attributes>
   </component>
 
   <!-- 
       Render a html "form" element.
    -->              
-  <component jsfid="form" componentType="javax.faces.HtmlForm">
-     <attributes>
-        <set name="rendered" useValueLateBinding="true" />
-        
-        <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" /> 
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" />  
-        
+  <component jsfid="form" componentType="javax.faces.HtmlForm" extends="baseHtml">
+     <attributes>        
         <!-- HTML 4.0 form attributes -->  
-        <set name="accept" useValueLateBinding="true" />  
-        <set name="acceptCharset" useValueLateBinding="true" />  
-        <set name="enctype" useValueLateBinding="true" />  
-        <set name="name" useValueLateBinding="true" />  
-        <set name="onreset" useValueLateBinding="true" />  
-        <set name="onsubmit" useValueLateBinding="true" />  
-        <set name="target" useValueLateBinding="true" />  
-        
+        <set name="accept" bindingType="VB" />  
+        <set name="acceptCharset" bindingType="VB" />  
+        <set name="enctype" bindingType="VB" />  
+        <set name="name" bindingType="VB" />  
+        <set name="onreset" bindingType="VB" />  
+        <set name="onsubmit" bindingType="VB" />  
+        <set name="target" bindingType="VB" />  
      </attributes>
   </component>
 
   <!-- 
       Render a html "table" element.
    -->              
-  <component jsfid="dataTable" componentType="javax.faces.HtmlDataTable">
+  <component jsfid="dataTable" componentType="javax.faces.HtmlDataTable" extends="baseHtml">
      <attributes>
-        <set name="rendered" useValueLateBinding="true" />
-       
-        <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" /> 
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" />  
         
         <!-- HTML 4.0 table attributes -->
-        <set name="align" useValueLateBinding="true" />  
-        <set name="border" useValueLateBinding="true" />  
-        <set name="bgcolor" useValueLateBinding="true" />  
-        <set name="cellpadding" useValueLateBinding="true" />  
-        <set name="cellspacing" useValueLateBinding="true" />  
-        <set name="datafld" useValueLateBinding="true" />  
-        <set name="datasrc" useValueLateBinding="true" />  
-        <set name="dataformatas" useValueLateBinding="true" />  
-        <set name="frame" useValueLateBinding="true" />  
-        <set name="rules" useValueLateBinding="true" />  
-        <set name="summary" useValueLateBinding="true" />  
-        <set name="width" useValueLateBinding="true" />
-        <set name="value" useValueLateBinding="true" />  
-        <set name="var" useValueLateBinding="false" />  
-        <set name="rows" useValueLateBinding="true" />  
-        <set name="first" useValueLateBinding="true" />  
-        <set name="columnClasses" useValueLateBinding="true" />  
-        <set name="footerClass" useValueLateBinding="true" />  
-        <set name="headerClass" useValueLateBinding="true" />  
-        <set name="rowClasses" useValueLateBinding="true" />      
+        <set name="align" bindingType="VB" />  
+        <set name="border" bindingType="VB" />  
+        <set name="bgcolor" bindingType="VB" />  
+        <set name="cellpadding" bindingType="VB" />  
+        <set name="cellspacing" bindingType="VB" />  
+        <set name="datafld" bindingType="VB" />  
+        <set name="datasrc" bindingType="VB" />  
+        <set name="dataformatas" bindingType="VB" />  
+        <set name="frame" bindingType="VB" />  
+        <set name="rules" bindingType="VB" />  
+        <set name="summary" bindingType="VB" />  
+        <set name="width" bindingType="VB" />
+        <set name="value" bindingType="VB" />  
+        <set name="var" bindingType="None" />  
+        <set name="rows" bindingType="VB" />  
+        <set name="first" bindingType="VB" />  
+        <set name="columnClasses" bindingType="VB" />  
+        <set name="footerClass" bindingType="VB" />  
+        <set name="headerClass" bindingType="VB" />  
+        <set name="rowClasses" bindingType="VB" />      
      </attributes>
   </component>
    <!-- 
       Render a html "input" element of type "button".
    -->            
-  <component jsfid="commandLink" componentType="javax.faces.HtmlCommandLink">
-      <attributes>
-      <!-- UIComponent attributes -->
-      <set name="rendered" useValueLateBinding="true" />
-      <set name="action" useMethodLateBinding="true" /> 
-      <set name="actionListener" useMethodLateBinding="true" /> 
-      <set name="immediate" useValueLateBinding="true" /> 
-      <set name="value" useValueLateBinding="true" />  
-      
-       <!-- HTML 4.0 universal attributes -->
-      <set name="dir" useValueLateBinding="true" />  
-      <set name="lang" useValueLateBinding="true" />  
-      <set name="style" useValueLateBinding="true" />  
-      <set name="title" useValueLateBinding="true" />  
-      <set name="styleClass" useValueLateBinding="true" /> 
-      
-      <!-- HTML 4.0 event-handler attributes --> 
-      <set name="onclick" useValueLateBinding="true" />  
-      <set name="ondblclick" useValueLateBinding="true" />  
-      <set name="onmousedown" useValueLateBinding="true" />  
-      <set name="onmouseup" useValueLateBinding="true" />  
-      <set name="onmouseover" useValueLateBinding="true" />  
-      <set name="onmouseover" useValueLateBinding="true" />  
-      <set name="onmousemove" useValueLateBinding="true" />  
-      <set name="onmouseout" useValueLateBinding="true" />  
-      <set name="onkeypress" useValueLateBinding="true" />  
-      <set name="onkeydown" useValueLateBinding="true" />  
-      <set name="onkeyup" useValueLateBinding="true" />  
-  
-      <!-- HTML 4.0 anchor (=a) attributes -->
-      <set name="accesskey" useValueLateBinding="true" />  
-      <set name="coords" useValueLateBinding="true" />  
-      <set name="hreflang" useValueLateBinding="true" />  
-      <set name="rel" useValueLateBinding="true" />  
-      <set name="rev" useValueLateBinding="true" />  
-      <set name="shape" useValueLateBinding="true" />  
-      <set name="tabindex" useValueLateBinding="true" />  
-      <set name="type" useValueLateBinding="true" />  
-      <set name="onblur" useValueLateBinding="true" />  
-      <set name="onfocus" useValueLateBinding="true" />  
-      <set name="target" useValueLateBinding="true" />  
+  <component jsfid="commandLink" componentType="javax.faces.HtmlCommandLink" extends="baseAction">
+      <attributes>  
+        <!-- HTML 4.0 anchor (=a) attributes -->
+        <set name="accesskey" bindingType="VB" />  
+        <set name="coords" bindingType="VB" />  
+        <set name="hreflang" bindingType="VB" />  
+        <set name="rel" bindingType="VB" />  
+        <set name="rev" bindingType="VB" />  
+        <set name="shape" bindingType="VB" />  
+        <set name="tabindex" bindingType="VB" />  
+        <set name="type" bindingType="VB" />  
+        <set name="onblur" bindingType="VB" />  
+        <set name="onfocus" bindingType="VB" />  
+        <set name="target" bindingType="VB" />  
      </attributes>
   </component>
 
@@ -823,278 +380,121 @@
    -->              
   <component jsfid="column" componentType="javax.faces.Column">
     <attributes>
-      <set name="rendered" useValueLateBinding="true" />
-      <set name="facetName" useValueLateBinding="true" /> 
+      <set name="rendered" bindingType="VB" />
+      <set name="facetName" bindingType="VB" /> 
     </attributes>
   </component>
 
    <!-- 
       Render a html "input" element of type "text".
    -->              
-  <component jsfid="inputText" componentType="javax.faces.HtmlInputText">
+  <component jsfid="inputText" componentType="javax.faces.HtmlInputText" extends="baseInput">
     <attributes>
-        <set name="rendered" useValueLateBinding="true" />
-        <set name="value" useValueLateBinding="true" />
-        <set name="converter" useValueLateBinding="true" />
-        <set name="immediate" useValueLateBinding="true" />
-        <set name="validator" useMethodLateBinding="true" />
-        <set name="valueChangeListener" useMethodLateBinding="true" />
-        
-        <!-- HTML 4.0 input attributes -->
-        <set name="accesskey" useValueLateBinding="true" />
-        <set name="align" useValueLateBinding="true" />
-        <set name="alt" useValueLateBinding="true" />
-        <set name="datafld" useValueLateBinding="true" />
-        <set name="datasrc" useValueLateBinding="true" />
-        <set name="dataformatas" useValueLateBinding="true" />
-        <set name="disabled" useValueLateBinding="true" />
-        <set name="maxlength" useValueLateBinding="true" />
-        <set name="onblur" useValueLateBinding="true" />
-        <set name="onchange" useValueLateBinding="true" />
-        <set name="onfocus" useValueLateBinding="true" />
-        <set name="readonly" useValueLateBinding="true" />
-        <set name="onselect" useValueLateBinding="true" />
-        <set name="size" useValueLateBinding="true" />
-        <set name="tabindex" useValueLateBinding="true" />
- 
-         <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" /> 
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" />  
-
-        <set name="escape" useValueLateBinding="true" />  
+        <set name="escape" bindingType="VB" />  
+        <set name="maxLength" bindingType="VB" />   
+        <set name="size" bindingType="VB" />              
     </attributes>
   </component>
 
    <!-- 
       Render a readonly text value substituting inline string parameters.  
    -->                
-  <component jsfid="outputFormat" componentType="javax.faces.HtmlOutputFormat">
-      <attributes>
-        <set name="rendered" useValueLateBinding="true" />
-        <set name="value" useValueLateBinding="true" />
-        <set name="converter" useValueLateBinding="true" />
-      
-         <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" />  
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" />  
-        <set name="escape" useValueLateBinding="true" />      
-      </attributes>
-      
-  </component>
+  <component jsfid="outputFormat" componentType="javax.faces.HtmlOutputFormat" extends="baseOutput"/>
   
    <!-- 
       Render a set of readonly text messages.  
    -->                  
-  <component jsfid="messages" componentType="javax.faces.HtmlMessages">
+  <component jsfid="messages" componentType="javax.faces.HtmlMessages" extends="baseHtml">
     <attributes>
-      <set name="rendered" useValueLateBinding="true" />
-      <set name="showSummary" useValueLateBinding="true" />
-      <set name="showDetail" useValueLateBinding="true" />
-      <set name="globalOnly" useValueLateBinding="true" />
-      
-      <set name="infoClass" useValueLateBinding="true" />
-      <set name="infoStyle" useValueLateBinding="true" />
-      <set name="warnClass" useValueLateBinding="true" />
-      <set name="warnStyle" useValueLateBinding="true" />
-      <set name="errorClass" useValueLateBinding="true" />
-      <set name="errorStyle" useValueLateBinding="true" />
-      <set name="fatalClass" useValueLateBinding="true" />
-      <set name="fatalStyle" useValueLateBinding="true" />
-      <set name="tooltip" useValueLateBinding="true" />
-      <set name="layout" useValueLateBinding="true" />
- 
-        <!-- HTML 4.0 universal attributes -->
-      <set name="dir" useValueLateBinding="true" />  
-      <set name="lang" useValueLateBinding="true" />  
-      <set name="style" useValueLateBinding="true" />  
-      <set name="title" useValueLateBinding="true" />  
-      <set name="styleClass" useValueLateBinding="true" /> 
-      
-      <!-- HTML 4.0 event-handler attributes --> 
-      <set name="onclick" useValueLateBinding="true" />  
-      <set name="ondblclick" useValueLateBinding="true" />  
-      <set name="onmousedown" useValueLateBinding="true" />  
-      <set name="onmouseup" useValueLateBinding="true" />  
-      <set name="onmouseover" useValueLateBinding="true" />  
-      <set name="onmouseover" useValueLateBinding="true" />  
-      <set name="onmousemove" useValueLateBinding="true" />  
-      <set name="onmouseout" useValueLateBinding="true" />  
-      <set name="onkeypress" useValueLateBinding="true" />  
-      <set name="onkeydown" useValueLateBinding="true" />  
-      <set name="onkeyup" useValueLateBinding="true" />      
+      <set name="rendered" bindingType="VB" />
+      <set name="showSummary" bindingType="VB" />
+      <set name="showDetail" bindingType="VB" />
+      <set name="globalOnly" bindingType="VB" />
+      
+      <set name="infoClass" bindingType="VB" />
+      <set name="infoStyle" bindingType="VB" />
+      <set name="warnClass" bindingType="VB" />
+      <set name="warnStyle" bindingType="VB" />
+      <set name="errorClass" bindingType="VB" />
+      <set name="errorStyle" bindingType="VB" />
+      <set name="fatalClass" bindingType="VB" />
+      <set name="fatalStyle" bindingType="VB" />
+      <set name="tooltip" bindingType="VB" />
+      <set name="layout" bindingType="VB" /> 
     </attributes>  
   </component>	
 
    <!-- 
       Render a readonly text messages associated with an "input" element.   
    -->                    
-  <component jsfid="message" componentType="javax.faces.HtmlMessage">
+  <component jsfid="message" componentType="javax.faces.HtmlMessage" extends="baseHtml">
     <attributes>
-      <set name="rendered" useValueLateBinding="true" />
-      <set name="for" useValueLateBinding="true" />
-      <set name="showSummary" useValueLateBinding="true" />
-      <set name="showDetail" useValueLateBinding="true" />
-      <set name="infoClass" useValueLateBinding="true" />
-      <set name="infoStyle" useValueLateBinding="true" />
-      <set name="warnClass" useValueLateBinding="true" />
-      <set name="warnStyle" useValueLateBinding="true" />
-      <set name="errorClass" useValueLateBinding="true" />
-      <set name="errorStyle" useValueLateBinding="true" />
-      <set name="fatalClass" useValueLateBinding="true" />
-      <set name="fatalStyle" useValueLateBinding="true" />
-      <set name="tooltip" useValueLateBinding="true" />
-
-       <!-- HTML 4.0 universal attributes -->
-      <set name="dir" useValueLateBinding="true" />  
-      <set name="lang" useValueLateBinding="true" />  
-      <set name="style" useValueLateBinding="true" />  
-      <set name="title" useValueLateBinding="true" />  
-      <set name="styleClass" useValueLateBinding="true" /> 
-      
-      <!-- HTML 4.0 event-handler attributes --> 
-      <set name="onclick" useValueLateBinding="true" />  
-      <set name="ondblclick" useValueLateBinding="true" />  
-      <set name="onmousedown" useValueLateBinding="true" />  
-      <set name="onmouseup" useValueLateBinding="true" />  
-      <set name="onmouseover" useValueLateBinding="true" />  
-      <set name="onmouseover" useValueLateBinding="true" />  
-      <set name="onmousemove" useValueLateBinding="true" />  
-      <set name="onmouseout" useValueLateBinding="true" />  
-      <set name="onkeypress" useValueLateBinding="true" />  
-      <set name="onkeydown" useValueLateBinding="true" />  
-      <set name="onkeyup" useValueLateBinding="true" />  
+      <set name="rendered" bindingType="VB" />
+      <set name="for" bindingType="VB" />
+      <set name="showSummary" bindingType="VB" />
+      <set name="showDetail" bindingType="VB" />
+      <set name="infoClass" bindingType="VB" />
+      <set name="infoStyle" bindingType="VB" />
+      <set name="warnClass" bindingType="VB" />
+      <set name="warnStyle" bindingType="VB" />
+      <set name="errorClass" bindingType="VB" />
+      <set name="errorStyle" bindingType="VB" />
+      <set name="fatalClass" bindingType="VB" />
+      <set name="fatalStyle" bindingType="VB" />
+      <set name="tooltip" bindingType="VB" />
+
     </attributes>  
   </component>	
 
    <!-- 
       Render a html "input" element of type "submit".
    -->                
-  <component jsfid="commandButton" componentType="javax.faces.HtmlCommandButton">
-    <attributes>
-      <!-- UIComponent attributes -->
-      <set name="rendered" useValueLateBinding="true" />
-      <set name="action" useMethodLateBinding="true" /> 
-      <set name="actionListener" useMethodLateBinding="true" /> 
-      <set name="immediate" useValueLateBinding="true" /> 
-      <set name="value" useValueLateBinding="true" />  
-      
-       <!-- HTML 4.0 universal attributes -->
-      <set name="dir" useValueLateBinding="true" />  
-      <set name="lang" useValueLateBinding="true" />  
-      <set name="style" useValueLateBinding="true" />  
-      <set name="title" useValueLateBinding="true" />  
-      <set name="styleClass" useValueLateBinding="true" /> 
-      
-      <!-- HTML 4.0 event-handler attributes --> 
-      <set name="onclick" useValueLateBinding="true" />  
-      <set name="ondblclick" useValueLateBinding="true" />  
-      <set name="onmousedown" useValueLateBinding="true" />  
-      <set name="onmouseup" useValueLateBinding="true" />  
-      <set name="onmouseover" useValueLateBinding="true" />  
-      <set name="onmouseover" useValueLateBinding="true" />  
-      <set name="onmousemove" useValueLateBinding="true" />  
-      <set name="onmouseout" useValueLateBinding="true" />  
-      <set name="onkeypress" useValueLateBinding="true" />  
-      <set name="onkeydown" useValueLateBinding="true" />  
-      <set name="onkeyup" useValueLateBinding="true" />  
-      
+  <component jsfid="commandButton" componentType="javax.faces.HtmlCommandButton" extends="baseAction">
+    <attributes>      
       <!-- HTML 4.0 button attributes -->
-      <set name="accesskey" useValueLateBinding="true" />  
-      <set name="alt" useValueLateBinding="true" />  
-      <set name="disabled" useValueLateBinding="true" />  
-      <set name="onblur" useValueLateBinding="true" />  
-      <set name="onchange" useValueLateBinding="true" />  
-      <set name="onfocus" useValueLateBinding="true" />  
-      <set name="onselect" useValueLateBinding="true" />  
-      <set name="size" useValueLateBinding="true" />  
-      <set name="tabindex" useValueLateBinding="true" />  
-      <set name="type" useValueLateBinding="true" />  
+      <set name="accesskey" bindingType="VB" />  
+      <set name="alt" bindingType="VB" />  
+      <set name="disabled" bindingType="VB" />  
+      <set name="onblur" bindingType="VB" />  
+      <set name="onchange" bindingType="VB" />  
+      <set name="onfocus" bindingType="VB" />  
+      <set name="onselect" bindingType="VB" />  
+      <set name="size" bindingType="VB" />  
+      <set name="tabindex" bindingType="VB" />  
+      <set name="type" bindingType="VB" />  
 
       <!-- HtmlCommandButton attributes -->
-      <set name="image" useValueLateBinding="true" />  
+      <set name="image" bindingType="VB" />  
     </attributes>
   </component>	
 
    <!-- 
       Render a html "table" element.
    -->                  
-  <component jsfid="panelGrid" componentType="javax.faces.HtmlPanelGrid">
+  <component jsfid="panelGrid" componentType="javax.faces.HtmlPanelGrid" extends="baseHtml">
      <attributes>
-        <set name="value" useValueLateBinding="true" />  
-        <set name="rendered" useValueLateBinding="true" />
-      
-        <!-- HTML 4.0 universal attributes -->
-        <set name="dir" useValueLateBinding="true" />  
-        <set name="lang" useValueLateBinding="true" />  
-        <set name="style" useValueLateBinding="true" />  
-        <set name="title" useValueLateBinding="true" />  
-        <set name="styleClass" useValueLateBinding="true" />  
-        
-        <!-- HTML 4.0 event-handler attributes --> 
-        <set name="onclick" useValueLateBinding="true" />  
-        <set name="ondblclick" useValueLateBinding="true" />  
-        <set name="onmousedown" useValueLateBinding="true" />  
-        <set name="onmouseup" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmouseover" useValueLateBinding="true" />  
-        <set name="onmousemove" useValueLateBinding="true" />  
-        <set name="onmouseout" useValueLateBinding="true" />  
-        <set name="onkeypress" useValueLateBinding="true" />  
-        <set name="onkeydown" useValueLateBinding="true" />  
-        <set name="onkeyup" useValueLateBinding="true" />  
+        <set name="value" bindingType="VB" />  
         
         <!-- HTML 4.0 table attributes -->
-        <set name="align" useValueLateBinding="true" />  
-        <set name="border" useValueLateBinding="true" />  
-        <set name="bgcolor" useValueLateBinding="true" />  
-        <set name="cellpadding" useValueLateBinding="true" />  
-        <set name="cellspacing" useValueLateBinding="true" />  
-        <set name="datafld" useValueLateBinding="true" />  
-        <set name="datasrc" useValueLateBinding="true" />  
-        <set name="dataformatas" useValueLateBinding="true" />  
-        <set name="frame" useValueLateBinding="true" />  
-        <set name="rules" useValueLateBinding="true" />  
-        <set name="summary" useValueLateBinding="true" />  
-        <set name="width" useValueLateBinding="true" />  
+        <set name="align" bindingType="VB" />  
+        <set name="border" bindingType="VB" />  
+        <set name="bgcolor" bindingType="VB" />  
+        <set name="cellpadding" bindingType="VB" />  
+        <set name="cellspacing" bindingType="VB" />  
+        <set name="datafld" bindingType="VB" />  
+        <set name="datasrc" bindingType="VB" />  
+        <set name="dataformatas" bindingType="VB" />  
+        <set name="frame" bindingType="VB" />  
+        <set name="rules" bindingType="VB" />  
+        <set name="summary" bindingType="VB" />  
+        <set name="width" bindingType="VB" />  
         
         <!-- GridRenderer attributes -->
-        <set name="columnClasses" useValueLateBinding="true" />  
-        <set name="columns" useValueLateBinding="true" />  
-        <set name="footerClass" useValueLateBinding="true" />  
-        <set name="headerClass" useValueLateBinding="true" />  
-        <set name="rowClasses" useValueLateBinding="true" />   
+        <set name="columnClasses" bindingType="VB" />  
+        <set name="columns" bindingType="VB" />  
+        <set name="footerClass" bindingType="VB" />  
+        <set name="headerClass" bindingType="VB" />  
+        <set name="rowClasses" bindingType="VB" />   
      </attributes>
   </component>
 
@@ -1108,8 +508,8 @@
    -->                      
   <component jsfid="space" extends="outputText">
     <attributes>
-      <set name="value" value="&amp;nbsp;" />
-      <set name="escape" value="false" />
+      <set name="value" value="&amp;nbsp;" bindingType="None"/>
+      <set name="escape" value="false" bindingType="None"/>
     </attributes>		
   </component>
 
@@ -1123,10 +523,10 @@
    -->                            
   <component jsfid="dateTimeConverter" componentType="javax.faces.DateTime" >
     <attributes>
-      <set name="dateStyle" useValueLateBinding="true" />
-      <set name="pattern" useValueLateBinding="true"/>
-      <set name="timeStyle" useValueLateBinding="true"/>
-      <set name="type" useValueLateBinding="true"/> 
+      <set name="dateStyle" bindingType="Early" />
+      <set name="pattern" bindingType="Early"/>
+      <set name="timeStyle" bindingType="Early"/>
+      <set name="type" bindingType="Early"/> 
     </attributes>	
   </component>
 
@@ -1135,20 +535,20 @@
    -->                            
   <component jsfid="validateLongRange" componentType="javax.faces.LongRange" >
       <attributes>
-        <set name="minimum" value="5" />
-        <set name="maximum" value="10" />
+        <set name="minimum" bindingType="Early" />
+        <set name="maximum" bindingType="Early" />
       </attributes>	
   </component>
 
 
   <!-- Nested Clay Component -->    
   <component jsfid="clay" componentType="org.apache.shale.clay.component.Clay" 
-       allowBody="false">
+        allowBody="false">
     <attributes>
-      <set name="rendered" useValueLateBinding="true" />    
-      <set name="clayJsfid" value="RUNTIME"/>
-      <set name="managedBeanName" />
-      <set name="shapeValidator" useMethodLateBinding="true"/> 
+      <set name="rendered" bindingType="VB" />    
+      <set name="clayJsfid" bindingType="VB" value="RUNTIME"/>
+      <set name="managedBeanName" bindingType="VB"/>
+      <set name="shapeValidator" bindingType="None"/> 
     </attributes>
   </component>	
 
@@ -1156,26 +556,26 @@
   <component jsfid="loadBundle" componentType="org.apache.shale.clay.component.LoadBundle" 
        allowBody="false">
     <attributes>
-      <set name="basename" />
-      <set name="var" value="msgs"/> 
+      <set name="basename" bindingType="Early"/>
+      <set name="var" bindingType="None" value="msgs"/> 
     </attributes>
   </component>	
 
   <!-- Inline HTML Tag -->    
   <component jsfid="clayOut" extends="clay">
     <attributes>
-      <set name="shapeValidator" useMethodLateBinding="true" value="#{ClayAmalgam.clayOut}"/> 
-      <set name="value" useValueLateBinding="false"/>
-      <set name="excapeXml" useValueLateBinding="false" value="true"/>
+      <set name="shapeValidator" bindingType="MB" value="#{ClayAmalgam.clayOut}"/> 
+      <set name="value" bindingType="None"/>
+      <set name="excapeXml" bindingType="None" value="true"/>
     </attributes>
   </component>	
 
   <!-- Inline Import Tag -->    
   <component jsfid="clayImport" extends="clay">
     <attributes>
-      <set name="shapeValidator" useMethodLateBinding="true" value="#{ClayAmalgam.clayImport}"/> 
-      <set name="url" useValueLateBinding="false"/>
-      <set name="excapeXml" useValueLateBinding="false" value="false"/>
+      <set name="shapeValidator" bindingType="MB" value="#{ClayAmalgam.clayImport}"/> 
+      <set name="url" bindingType="None"/>
+      <set name="excapeXml" bindingType="None" value="false"/>
     </attributes>
   </component>	
 

Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties?rev=292595&r1=292594&r2=292595&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties (original)
+++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/Bundle.properties Thu Sep 29 18:14:12 2005
@@ -56,7 +56,8 @@
 assign.action.listener.error=Cannot add actionListener to a component not implementing interface ActionSource: {0}. 
 
 
-#org.apache.shale.clay.component.chain.AssignConverterCommand
+#org.apache.shale.clay.component.chain.AssignConverterCommand 
+#org.apache.shale.clay.component.chain.PropertyConverterCommand
 assign.converter.error=Cannot add converter to a component not implementing interface ValueHolder: {0}.
 
 #org.apache.shale.clay.component.chain.AssignPropertiesCommand
@@ -98,6 +99,9 @@
 #org.apache.shale.clay.component.chain.PropertyValueChangeListenerCommand
 property.valueChangeListener.error=Cannot bind valueChangeListener expression to a component not implementing interface EditableValueHolder: {0}
 
+#org.apache.shale.clay.component.chain.PropertyConverterCommand
+property.converter.error=Cannot bind a converter to a component not implementing interface ValueHolder: {0}
+
 #org.apache.shale.clay.config.beans (ALL)
 missing.jsfid.error=Missing {0}, cannot add child element to parent {1}
 
@@ -134,3 +138,6 @@
 missing.attribute=The "{0}" attribute is required when using the ClayAmalgam.{1}() validator method binding event.
 invalid.binding=Invalid use of the ClayAmalgam.{0}() validator method binding event.  This method assume the use of the Clay component's "shapeValidator" property binding.
 invalid.attribute=The "{0}" attribute is required when using the ClayAmalgam.{1}() validator method binding event.
+
+#(ALL)
+clay.null.tagUtils=The utility managed bean "org.apache.shale.TAG_UTILITY_BEAN" registered in the core shale jar cannot be resolved.   
\ No newline at end of file

Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/Clay.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/Clay.java?rev=292595&r1=292594&r2=292595&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/Clay.java (original)
+++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/Clay.java Thu Sep 29 18:14:12 2005
@@ -282,10 +282,11 @@
             // using the getter and setter for the displayElementRoot
             if (this.getShapeValidator() != null) {
                 
+                //Short cut to reuse logic for resolving the literal "managed-bean-name"
                 AttributeBean attr = new AttributeBean();
                 attr.setName("validator");
                 attr.setValue(getShapeValidator());
-                attr.setUseMethodLateBinding(Boolean.TRUE.toString());
+                attr.setBindingType(AttributeBean.BINDING_TYPE_NONE);
                 
                 ClayContext clayContext = new ClayContext();
                 clayContext.setAttribute(attr);

Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AssignPropertiesCommand.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AssignPropertiesCommand.java?rev=292595&r1=292594&r2=292595&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AssignPropertiesCommand.java (original)
+++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/AssignPropertiesCommand.java Thu Sep 29 18:14:12 2005
@@ -78,12 +78,15 @@
         
         Iterator ai = displayElement.getAttributeIterator();
         Catalog catalog = getCatalog();
-        Command command = catalog
-                .getCommand(Globals.SET_ATTRIBUTE_COMMAND_NAME);
+        Command defaultCommand = catalog.getCommand(Globals.SET_ATTRIBUTE_COMMAND_NAME);
         next: while (ai.hasNext()) {
             AttributeBean a = (AttributeBean) ai.next();
             if (a.getValue() == null)
                continue next;
+            
+            Command command = null;
+            if ((command = catalog.getCommand(a.getName())) == null)
+               command = defaultCommand;
             
             clayContext.setAttribute(a);
             

Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyActionListenerCommand.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyActionListenerCommand.java?rev=292595&r1=292594&r2=292595&view=diff
==============================================================================
--- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyActionListenerCommand.java (original)
+++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyActionListenerCommand.java Thu Sep 29 18:14:12 2005
@@ -21,7 +21,6 @@
 import javax.faces.component.ActionSource;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
-import javax.faces.el.MethodBinding;
 
 import org.apache.commons.chain.Command;
 import org.apache.commons.chain.Context;
@@ -29,6 +28,8 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.shale.clay.config.beans.AttributeBean;
 import org.apache.shale.clay.config.beans.ComponentBean;
+import org.apache.shale.faces.ShaleConstants;
+import org.apache.shale.util.Tags;
 
 /**
  * <p>
@@ -79,7 +80,12 @@
         
         if (attributeBean.getName().equals("actionListener") && attributeBean.getValue() != null) {
             isFinal = true;
-            
+ 
+            Tags tagUtils = (Tags) facesContext.getApplication().getVariableResolver()
+                            .resolveVariable(facesContext, ShaleConstants.TAG_UTILITY_BEAN);
+            if (tagUtils == null)
+                throw new NullPointerException(messages.getMessage("clay.null.tagUtils"));
+  
             UIComponent child = (UIComponent) clayContext.getChild();
             if (child == null)
                 throw new NullPointerException(messages.getMessage("clay.null.childComponent"));
@@ -87,13 +93,8 @@
             if (child instanceof ActionSource) {
                 
                 String expr = replaceMnemonic(clayContext);
-                Class[] methodSignature = { javax.faces.event.ActionEvent.class };
-                
-                MethodBinding binding = facesContext.getApplication()
-                .createMethodBinding(expr, methodSignature);
-                
-                ((ActionSource) child)
-                .setActionListener((MethodBinding) binding);
+                tagUtils.setActionListener(child, expr);
+
             } else {
                 log.error(messages.getMessage("property.actionListener.error", new Object[] {attributeBean}));
             }

Added: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyConverterCommand.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyConverterCommand.java?rev=292595&view=auto
==============================================================================
--- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyConverterCommand.java (added)
+++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/component/chain/PropertyConverterCommand.java Thu Sep 29 18:14:12 2005
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Id: PropertyActionCommand.java 291247 2005-09-24 04:20:32Z wsmoak $
+ */
+
+package org.apache.shale.clay.component.chain;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.ValueHolder;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.webapp.UIComponentTag;
+
+import org.apache.commons.chain.Command;
+import org.apache.commons.chain.Context;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.shale.clay.config.beans.AttributeBean;
+import org.apache.shale.clay.config.beans.ComponentBean;
+import org.apache.shale.faces.ShaleConstants;
+import org.apache.shale.util.Tags;
+
+/**
+ * <p>
+ * This <code>Command</code> will create an <code>converter</code> value
+ * binding and assign it to the <code>UIComponent</code> implementing the
+ * <code>ValueHolder</code> interface.
+ * </p>
+ */
+
+public class PropertyConverterCommand extends AbstractCommand implements Command {
+ 
+    /**
+     * <p>
+     * Common logger utility class
+     * </p>
+     */    
+    private static Log log;
+    static {
+        log = LogFactory.getLog(PropertyActionCommand.class);
+    }
+ 
+    /**
+     * <p>
+     * Looks to see if the {@link AttributeBean} on the {@link ClayContext} is a
+     * <code>converter</code> attribute. If it is, create a
+     * <code>ValueBinding</code> or a <code>Converter</code> and assign it to the 
+     * component returning a <code>true</code> value. Otherwise, return a <code>false</code>
+     * value. This <code>Command</code> is invoked from the
+     * {@link AssignPropertiesCommand} chain.
+     * </p>
+     */
+    public boolean execute(Context context) throws Exception {
+        
+        boolean isFinal = false;
+        
+        ClayContext clayContext = (ClayContext) context;
+        if (clayContext == null)
+            throw new NullPointerException(messages.getMessage("clay.null.clayContext"));
+        AttributeBean attributeBean = clayContext.getAttribute();
+        if (attributeBean == null)
+            throw new NullPointerException(messages.getMessage("clay.null.attributeBean"));
+        ComponentBean displayElement = clayContext.getDisplayElement();
+        if (displayElement == null)
+            throw new NullPointerException(messages.getMessage("clay.null.componentBean"));
+        FacesContext facesContext = clayContext.getFacesContext();
+        if (facesContext == null)
+            throw new NullPointerException(messages.getMessage("clay.null.facesContext"));
+
+        Tags tagUtils = (Tags) facesContext
+                                .getApplication()
+                                .getVariableResolver()
+                                .resolveVariable(facesContext,
+                                        ShaleConstants.TAG_UTILITY_BEAN);
+        
+        if (tagUtils == null)
+            throw new NullPointerException(messages.getMessage("clay.null.tagUtils"));
+
+        if (attributeBean.getName().equals("converter") && attributeBean.getValue() != null) {
+            isFinal = true;
+            
+            UIComponent child = (UIComponent) clayContext.getChild();
+            if (child == null)
+                throw new NullPointerException(messages.getMessage("clay.null.childComponent"));
+            
+            if (child instanceof ValueHolder) {
+                String expr = null;
+                
+                boolean isEL = UIComponentTag.isValueReference(attributeBean.getValue()); 
+                if (isEL) 
+                    expr = replaceMnemonic(clayContext);
+                else
+                    expr = attributeBean.getValue();
+
+                if (isEL) {
+                   tagUtils.setValueBinding(child, "converter", expr);     
+                } else {
+                    Converter converter = null;
+                    try {
+                        converter = facesContext.getApplication().createConverter(expr);
+                    } catch (Exception e) {
+                        log.error(messages.getMessage("create.converter.error",
+                                new Object[] { displayElement }), e);
+                                throw e;
+                    }
+                    ((ValueHolder) child).setConverter(converter);
+                }
+                
+            } else {
+                log.error(messages.getMessage("property.converter.error", new Object[] {attributeBean}));
+            }
+        }
+        
+        return isFinal;
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org