You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shale.apache.org by gv...@apache.org on 2006/11/06 23:44:57 UTC

svn commit: r471910 - in /shale/framework/trunk/shale-clay/src: main/java/org/apache/shale/clay/component/ main/java/org/apache/shale/clay/component/chain/ main/java/org/apache/shale/clay/parser/builder/ main/resources/META-INF/ main/resources/org/apac...

Author: gvanmatre
Date: Mon Nov  6 14:44:56 2006
New Revision: 471910

URL: http://svn.apache.org/viewvc?view=rev&rev=471910
Log:
Provided "binding" attribute support for Converters, Validators, ActionListeners and ValueChangeListeners as part of the JSF 1.2 spec enhancements (SHALE-67).

Added:
    shale/framework/trunk/shale-clay/src/test/java/org/apache/shale/clay/config/BindingTestCase.java   (with props)
    shale/framework/trunk/shale-clay/src/test/resources/org/apache/shale/clay/config/binding.html   (with props)
Modified:
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/Clay.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/AbstractCommand.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateActionListenerCommand.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateComponentCommand.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateConverterCommand.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateValidatorCommand.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateValueChangeListenerCommand.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyActionCommand.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyActionListenerCommand.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyConverterCommand.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValidatorCommand.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueChangeListenerCommand.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/ElementBuilder.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java
    shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/OutputLinkBuilder.java
    shale/framework/trunk/shale-clay/src/main/resources/META-INF/clay-config.xml
    shale/framework/trunk/shale-clay/src/main/resources/org/apache/shale/clay/component/chain/shale-clay-config.xml

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/Clay.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/Clay.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/Clay.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/Clay.java Mon Nov  6 14:44:56 2006
@@ -552,7 +552,7 @@
     }
 
     /**
-     * <p>Returns the component's family.</p>
+     * @return Returns the component's family.
      */
     public String getFamily() {
         return "org.apache.shale.clay";

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/AbstractCommand.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/AbstractCommand.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/AbstractCommand.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/AbstractCommand.java Mon Nov  6 14:44:56 2006
@@ -37,6 +37,7 @@
 import org.apache.shale.clay.config.Globals;
 import org.apache.shale.clay.config.beans.SymbolBean;
 import org.apache.shale.util.Messages;
+import org.apache.shale.util.Tags;
 
 /**
  * <p>
@@ -62,6 +63,20 @@
     }
 
     /**
+     * <p>Shale tag helper class that contains utility methods for setting
+     * component binding and method properties.</p>
+     */
+    private Tags tagUtils = new Tags();
+
+    /**
+     * @return Shale tag helper class that contains utility methods for setting
+     * component binding and method properties.
+     */
+    protected Tags getTagUtils() {
+        return tagUtils;
+    }
+
+    /**
      * <p>
      * Returns the {@link Catalog} from the
      * <code>Globals.CLAY_CATALOG_NAME</code> in the
@@ -342,6 +357,30 @@
      * @exception Exception checked
      */
     public abstract boolean execute(Context context) throws Exception;
+
+    /**
+     * <p>Return true if the specified string contains an EL expression.</p>
+     *
+     * <p>This is taken almost verbatim from {@link javax.faces.webapp.UIComponentTag}
+     * in order to remove JSP dependencies from the renderers.</p>
+     *
+     * @param value String to be checked for being an expression
+     * @return <code>true</code> if the value is a binding expression
+     */
+    protected boolean isValueReference(String value) {
+
+        if (value == null) {
+            return false;
+        }
+
+        int start = value.indexOf("#{");
+        if (start < 0) {
+            return false;
+        }
+
+        int end = value.lastIndexOf('}');
+        return (end >= 0) && (start < end);
+    }
 
 }
 

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateActionListenerCommand.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateActionListenerCommand.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateActionListenerCommand.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateActionListenerCommand.java Mon Nov  6 14:44:56 2006
@@ -23,11 +23,13 @@
 import javax.faces.component.ActionSource;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
 import javax.faces.event.ActionListener;
 
 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;
 
 /**
@@ -99,20 +101,30 @@
         ActionListener listener = null;
         try {
 
-            ClassLoader loader = Thread.currentThread().getContextClassLoader();
-            if (loader == null) {
-                loader = getClass().getClassLoader();
-            }
+            AttributeBean attr = displayElement.getAttribute("binding");
+            if (attr != null && isValueReference(attr.getValue())) {
+                clayContext.setAttribute(attr);
+                String expr = replaceMnemonic(clayContext);
+                ValueBinding vb = facesContext.getApplication().createValueBinding(expr);
+                listener = (ActionListener) vb.getValue(facesContext);
+            } else {
+
+                ClassLoader loader = Thread.currentThread().getContextClassLoader();
+                if (loader == null) {
+                    loader = getClass().getClassLoader();
+                }
 
-            listener = (ActionListener) loader.loadClass(
-                    displayElement.getComponentType()).newInstance();
+                listener = (ActionListener) loader.loadClass(
+                        displayElement.getComponentType()).newInstance();
 
-            loader = null;
+                loader = null;
+            }
         } catch (Exception e) {
             log.error(getMessages().getMessage("create.actionListener.error",
                     new Object[] { displayElement }), e);
-                    throw e;
+            throw e;
         }
+
         parent.addActionListener(listener);
         // reassign the child to the ActionListener for the
         // AssignPropertiesCommand

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateComponentCommand.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateComponentCommand.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateComponentCommand.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateComponentCommand.java Mon Nov  6 14:44:56 2006
@@ -122,7 +122,6 @@
 
             if (id == null) {
                 id = facesContext.getViewRoot().createUniqueId();
-                //id = createUniqueId(facesContext, displayElement);
             } else {
                 id = replaceMnemonic(clayContext, id);
             }

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateConverterCommand.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateConverterCommand.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateConverterCommand.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateConverterCommand.java Mon Nov  6 14:44:56 2006
@@ -24,10 +24,12 @@
 import javax.faces.component.ValueHolder;
 import javax.faces.context.FacesContext;
 import javax.faces.convert.Converter;
+import javax.faces.el.ValueBinding;
 
 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;
 
 /**
@@ -98,13 +100,23 @@
         }
         Converter converter = null;
         try {
-            converter = facesContext.getApplication().createConverter(
-                    displayElement.getComponentType());
+
+            AttributeBean attr = displayElement.getAttribute("binding");
+            if (attr != null && isValueReference(attr.getValue())) {
+                clayContext.setAttribute(attr);
+                String expr = replaceMnemonic(clayContext);
+                ValueBinding vb = facesContext.getApplication().createValueBinding(expr);
+                converter = (Converter) vb.getValue(facesContext);
+            } else {
+                converter = facesContext.getApplication().createConverter(
+                        displayElement.getComponentType());
+            }
         } catch (Exception e) {
             log.error(getMessages().getMessage("create.converter.error",
                     new Object[] { displayElement }), e);
-                    throw e;
+            throw e;
         }
+
         if (converter != null) {
             parent.setConverter(converter);
             // reassign the child to the converter for the

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateValidatorCommand.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateValidatorCommand.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateValidatorCommand.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateValidatorCommand.java Mon Nov  6 14:44:56 2006
@@ -23,11 +23,13 @@
 import javax.faces.component.EditableValueHolder;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
 import javax.faces.validator.Validator;
 
 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;
 
 /**
@@ -95,12 +97,22 @@
 
         Validator validator = null;
         try {
-            validator = facesContext.getApplication().createValidator(
-                    displayElement.getComponentType());
+            AttributeBean attr = displayElement.getAttribute("binding");
+            if (attr != null && isValueReference(attr.getValue())) {
+                clayContext.setAttribute(attr);
+                String expr = replaceMnemonic(clayContext);
+                ValueBinding vb = facesContext.getApplication()
+                        .createValueBinding(expr);
+                validator = (Validator) vb.getValue(facesContext);
+
+            } else {
+                validator = facesContext.getApplication().createValidator(
+                        displayElement.getComponentType());
+            }
         } catch (Exception e) {
             log.error(getMessages().getMessage("create.validator.error",
                     new Object[] { displayElement }), e);
-                    throw e;
+            throw e;
         }
         parent.addValidator(validator);
         // reassign the child to the validator for the

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateValueChangeListenerCommand.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateValueChangeListenerCommand.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateValueChangeListenerCommand.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/CreateValueChangeListenerCommand.java Mon Nov  6 14:44:56 2006
@@ -23,11 +23,13 @@
 import javax.faces.component.EditableValueHolder;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
+import javax.faces.el.ValueBinding;
 import javax.faces.event.ValueChangeListener;
 
 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;
 
 /**
@@ -95,15 +97,25 @@
         ValueChangeListener listener = null;
         try {
 
-            ClassLoader loader = Thread.currentThread().getContextClassLoader();
-            if (loader == null) {
-                loader = getClass().getClassLoader();
-            }
+            AttributeBean attr = displayElement.getAttribute("binding");
+            if (attr != null && isValueReference(attr.getValue())) {
+                clayContext.setAttribute(attr);
+                String expr = replaceMnemonic(clayContext);
+                ValueBinding vb = facesContext.getApplication().createValueBinding(expr);
+                listener = (ValueChangeListener) vb.getValue(facesContext);
+
+            } else {
+
+                ClassLoader loader = Thread.currentThread().getContextClassLoader();
+                if (loader == null) {
+                    loader = getClass().getClassLoader();
+                }
 
-            listener = (ValueChangeListener) loader.loadClass(
-                    displayElement.getComponentType()).newInstance();
+                listener = (ValueChangeListener) loader.loadClass(
+                        displayElement.getComponentType()).newInstance();
 
-            loader = null;
+                loader = null;
+            }
         } catch (Exception e) {
             log.error(getMessages().getMessage("create.valueChangeListener"), e);
             throw e;

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyActionCommand.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyActionCommand.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyActionCommand.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyActionCommand.java Mon Nov  6 14:44:56 2006
@@ -30,7 +30,6 @@
 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.util.Tags;
 
 /**
  * <p>
@@ -53,13 +52,6 @@
     }
 
     /**
-     * <p>Shale tag helper class that contains utility methods for setting
-     * component binding and method properties.</p>
-     */
-    private Tags tagUtils = new Tags();
-
-
-    /**
      * <p>
      * Looks to see if the {@link AttributeBean} on the {@link ClayContext} is a
      * <code>action</code> attribute. If it is, create a
@@ -94,10 +86,6 @@
             throw new NullPointerException(getMessages().getMessage("clay.null.facesContext"));
         }
 
-        if (tagUtils == null) {
-            throw new NullPointerException(getMessages().getMessage("clay.null.tagUtils"));
-        }
-
         if (attributeBean.getName().equals("action") && attributeBean.getValue() != null) {
             isFinal = true;
 
@@ -109,7 +97,7 @@
             if (child instanceof ActionSource) {
                 String expr = null;
                 expr = replaceMnemonic(clayContext);
-                tagUtils.setAction(child, expr);
+                getTagUtils().setAction(child, expr);
             } else {
                 log.error(getMessages().getMessage("property.action.error", new Object[] {attributeBean}));
             }

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyActionListenerCommand.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyActionListenerCommand.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyActionListenerCommand.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyActionListenerCommand.java Mon Nov  6 14:44:56 2006
@@ -30,7 +30,6 @@
 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.util.Tags;
 
 /**
  * <p>
@@ -53,12 +52,6 @@
     }
 
     /**
-     * <p>Shale tag helper class that contains utility methods for setting
-     * component binding and method properties.</p>
-     */
-    private Tags tagUtils = new Tags();
-
-    /**
      * <p>
      * Looks to see if the {@link AttributeBean} on the {@link ClayContext} is a
      * <code>actionListener</code> attribute. If it is, create a
@@ -104,7 +97,7 @@
             if (child instanceof ActionSource) {
 
                 String expr = replaceMnemonic(clayContext);
-                tagUtils.setActionListener(child, expr);
+                getTagUtils().setActionListener(child, expr);
 
             } else {
                 log.error(getMessages().getMessage("property.actionListener.error", new Object[] {attributeBean}));

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyConverterCommand.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyConverterCommand.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyConverterCommand.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyConverterCommand.java Mon Nov  6 14:44:56 2006
@@ -24,7 +24,6 @@
 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;
@@ -32,7 +31,6 @@
 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.util.Tags;
 
 /**
  * <p>
@@ -55,12 +53,6 @@
     }
 
     /**
-     * <p>Shale tag helper class that contains utility methods for setting
-     * component binding and method properties.</p>
-     */
-    private Tags tagUtils = new Tags();
-
-    /**
      * <p>
      * Looks to see if the {@link AttributeBean} on the {@link ClayContext} is a
      * <code>converter</code> attribute. If it is, create a
@@ -106,11 +98,11 @@
             if (child instanceof ValueHolder) {
                 String expr = null;
 
-                boolean isEL = UIComponentTag.isValueReference(attributeBean.getValue());
+                boolean isEL = isValueReference(attributeBean.getValue());
                 expr = replaceMnemonic(clayContext);
 
                 if (isEL) {
-                   tagUtils.setValueBinding(child, "converter", expr);
+                   getTagUtils().setValueBinding(child, "converter", expr);
                 } else {
                     Converter converter = null;
                     try {

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValidatorCommand.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValidatorCommand.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValidatorCommand.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValidatorCommand.java Mon Nov  6 14:44:56 2006
@@ -30,7 +30,6 @@
 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.util.Tags;
 
 /**
  * <p>
@@ -54,12 +53,6 @@
     }
 
     /**
-     * <p>Shale tag helper class that contains utility methods for setting
-     * component binding and method properties.</p>
-     */
-    private Tags tagUtils = new Tags();
-
-    /**
      * <p>
      * Looks to see if the {@link AttributeBean} on the {@link ClayContext} is a
      * <code>validator</code> attribute. If it is, create a
@@ -103,7 +96,7 @@
             if (child instanceof EditableValueHolder) {
 
                 String expr = replaceMnemonic(clayContext);
-                tagUtils.setValidator(child, expr);
+                getTagUtils().setValidator(child, expr);
 
             } else {
                 log.error(getMessages().getMessage("property.validator.error", new Object[] {attributeBean}));

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueChangeListenerCommand.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueChangeListenerCommand.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueChangeListenerCommand.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueChangeListenerCommand.java Mon Nov  6 14:44:56 2006
@@ -30,7 +30,6 @@
 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.util.Tags;
 
 /**
  * <p>
@@ -54,12 +53,6 @@
     }
 
     /**
-     * <p>Shale tag helper class that contains utility methods for setting
-     * component binding and method properties.</p>
-     */
-    private Tags tagUtils = new Tags();
-
-    /**
      * <p>
      * Looks to see if the {@link AttributeBean} on the {@link ClayContext} is a
      * <code>valueChangeListener</code> attribute. If it is, create a
@@ -103,7 +96,7 @@
             if (child instanceof EditableValueHolder) {
 
                 String expr = replaceMnemonic(clayContext);
-                tagUtils.setValueChangeListener(child, expr);
+                getTagUtils().setValueChangeListener(child, expr);
 
             } else {
                 log.error(getMessages().getMessage("property.valueChangeListener.error", new Object[] {attributeBean}));

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/component/chain/PropertyValueCommand.java Mon Nov  6 14:44:56 2006
@@ -33,7 +33,6 @@
 import org.apache.shale.clay.config.beans.ComponentBean;
 import org.apache.shale.util.ConverterHelper;
 import org.apache.shale.util.PropertyHelper;
-import org.apache.shale.util.Tags;
 
 /**
  * <p>
@@ -56,13 +55,6 @@
      */
     private ConverterHelper converterHelper = new ConverterHelper();
 
-
-    /**
-     * <p>Shale tag helper class that contains utility methods for setting
-     * component binding and method properties.</p>
-     */
-    private Tags tagUtils = new Tags();
-
     /**
      * <p>Sets a property value on the target component.  If the data
      * type of the target bean property is not a String and the property
@@ -145,6 +137,12 @@
             throw new NullPointerException(getMessages().getMessage("clay.null.facesContext"));
         }
 
+        // don't try to set the binding attribute of anything but a component
+        if (attributeBean.getName().equals("binding")
+                && !(child instanceof UIComponentBase)) {
+            return isFinal;
+
+        }
         // replace all symbols returning the target attribute value
         String expr = replaceMnemonic(clayContext);
 
@@ -153,15 +151,6 @@
            return isFinal;
         }
 
-        //when using the html templating, javascript and css will have matching curly braces {}.
-        //and pound sign # too.
-        int pound = -1;
-        int leftCurly = -1;
-        int rightCurly = -1;
-
-        pound = expr.indexOf('#');
-        leftCurly = expr.indexOf('{');
-        rightCurly = expr.indexOf('}');
 
         String bindingType = attributeBean.getBindingType();
         if (bindingType == null) {
@@ -169,8 +158,7 @@
         }
 
         //contains expression language
-        boolean isEL = ((pound > -1 && leftCurly > -1 && rightCurly > -1)
-                && (rightCurly > leftCurly) && ((leftCurly - pound) == 1));
+        boolean isEL = isValueReference(expr);
         //use value binding
         boolean isVB = ((bindingType.equals(AttributeBean.BINDING_TYPE_VALUE))
                         && (child instanceof UIComponentBase));
@@ -178,7 +166,7 @@
         boolean isEarly = bindingType.equals(AttributeBean.BINDING_TYPE_EARLY);
 
         if (isEL && isVB) {
-           tagUtils.setValueBinding((UIComponentBase) child, attributeBean.getName(), expr);
+           getTagUtils().setValueBinding((UIComponentBase) child, attributeBean.getName(), expr);
         } else if (isEL && isEarly) {
             ValueBinding vb = facesContext.getApplication().createValueBinding(expr);
             Object value = vb.getValue(facesContext);

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/ElementBuilder.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/ElementBuilder.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/ElementBuilder.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/ElementBuilder.java Mon Nov  6 14:44:56 2006
@@ -421,7 +421,7 @@
 
 
     /**
-     * <p>Test the value of the node and returns <code>true</code> if 
+     * <p>Test the value of the node and returns <code>true</code> if
      * the value is only whitespace.</p>
      *
      * @param node markup node
@@ -433,7 +433,7 @@
              i < node.getToken().getEndOffset(); i++) {
            char c = document.charAt(i);
            if (!Character.isWhitespace(c)) {
-               return false;    
+               return false;
            }
         }
         return true;

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java Mon Nov  6 14:44:56 2006
@@ -388,6 +388,7 @@
                     addConverter(child, target);
                     deleteList.add(child);
                 } else if (child.getName().startsWith("validate")
+                        || child.getName().startsWith("validator")
                         || child.getName().startsWith("commonsValidator")) {
                     addValidator(child, target);
                     deleteList.add(child);

Modified: shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/OutputLinkBuilder.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/OutputLinkBuilder.java?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/OutputLinkBuilder.java (original)
+++ shale/framework/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/OutputLinkBuilder.java Mon Nov  6 14:44:56 2006
@@ -25,7 +25,6 @@
 import org.apache.shale.clay.config.beans.ElementBean;
 import org.apache.shale.clay.config.beans.SymbolBean;
 import org.apache.shale.clay.parser.Node;
-import org.apache.shale.clay.parser.builder.chain.AnchorBuilderRule;
 
 /**
  * <p>
@@ -87,7 +86,7 @@
      */
     protected void encodeBegin(Node node, ElementBean target, ComponentBean root) {
         super.encodeBegin(node, target, root);
-        
+
         AttributeBean attr = target.getAttribute("value");
         SymbolBean symbol = target.getSymbol("href");
         if ((symbol != null && attr != null)

Modified: shale/framework/trunk/shale-clay/src/main/resources/META-INF/clay-config.xml
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/resources/META-INF/clay-config.xml?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/resources/META-INF/clay-config.xml (original)
+++ shale/framework/trunk/shale-clay/src/main/resources/META-INF/clay-config.xml Mon Nov  6 14:44:56 2006
@@ -27,21 +27,33 @@
 
   <component jsfid="converter" componentType="override">
      <description>Abstract component definition.</description>
+     <attributes>
+         <set name="binding" bindingType="VB" />
+     </attributes>
   </component>
   <component jsfid="f:converter" extends="converter"/>
   
   <component jsfid="validator" componentType="override">
      <description>Abstract component definition.</description>
+     <attributes>
+         <set name="binding" bindingType="VB" />
+     </attributes>
   </component>
   <component jsfid="f:validator" extends="validator"/>
   
   <component jsfid="actionListener" componentType="override">
      <description>Abstract component definition.</description>
+     <attributes>
+         <set name="binding" bindingType="VB" />
+     </attributes>  
   </component>
   <component jsfid="f:actionListener" extends="actionListener"/>
   
   <component jsfid="valueChangeListener" componentType="override">
      <description>Abstract component definition.</description>
+     <attributes>
+         <set name="binding" bindingType="VB" />
+     </attributes>
   </component>
   <component jsfid="f:valueChangeListener" extends="valueChangeListener"/>
 
@@ -247,7 +259,7 @@
   </component>
   <component jsfid="s:token" extends="token"/> 
 
-  <component jsfid="commonsValidator" componentType="org.apache.shale.CommonsValidator" allowBody="false">
+  <component jsfid="commonsValidator" componentType="org.apache.shale.CommonsValidator" allowBody="false" extends="validator">
       <description>This is a JSF validator that uses Commons Validator to perform 
          validation, either client-side or server-side.
       </description>
@@ -1078,61 +1090,61 @@
   </component>
   <component jsfid="clay:space" extends="space"/>
 
-  <component jsfid="bigDecimalConverter" componentType="javax.faces.BigDecimal">
+  <component jsfid="bigDecimalConverter" componentType="javax.faces.BigDecimal" extends="converter">
      <description>Converts a String value into a java.util.BigDecimal type and back to a String.</description>
   </component>
   <component jsfid="convertBigDecimal" extends="bigDecimalConverter"/>
   <component jsfid="f:convertBigDecimal" extends="convertBigDecimal"/>
 
-  <component jsfid="bigIntegerConverter" componentType="javax.faces.BigInteger">
+  <component jsfid="bigIntegerConverter" componentType="javax.faces.BigInteger" extends="converter">
      <description>Converts a String value into a java.util.BigInteger type and back to a String.</description>
   </component>
   <component jsfid="convertBigInteger" extends="bigIntegerConverter"/>
   <component jsfid="f:convertBigInteger" extends="convertBigInteger"/>
 
-  <component jsfid="booleanConverter" componentType="javax.faces.Boolean">
+  <component jsfid="booleanConverter" componentType="javax.faces.Boolean" extends="converter">
      <description>Converts a String value into a java.lang.Boolean type and back to a String.</description>
   </component>
   <component jsfid="convertBoolean" extends="booleanConverter"/>
   <component jsfid="f:convertBoolean" extends="convertBoolean"/>
   
-  <component jsfid="byteConverter" componentType="javax.faces.Byte">
+  <component jsfid="byteConverter" componentType="javax.faces.Byte" extends="converter">
      <description>Converts a String value into a java.lang.Byte type and back to a String.</description>
   </component>
   <component jsfid="convertByte" extends="byteConverter"/>
   <component jsfid="f:convertByte" extends="convertByte"/>
 
-  <component jsfid="characterConverter" componentType="javax.faces.Character">
+  <component jsfid="characterConverter" componentType="javax.faces.Character" extends="converter">
      <description>Converts a String value into a java.lang.Character type and back to a String.</description>
   </component>
   <component jsfid="convertCharacter" extends="characterConverter"/>
   <component jsfid="f:convertCharacter" extends="convertCharacter"/>
   
-  <component jsfid="doubleConverter" componentType="javax.faces.Double">
+  <component jsfid="doubleConverter" componentType="javax.faces.Double" extends="converter">
      <description>Converts a String value into a java.lang.Double type and back to a String.</description>
   </component>
   <component jsfid="convertDouble" extends="doubleConverter"/>
   <component jsfid="f:convertDouble" extends="convertDouble"/>
 
-  <component jsfid="floatConverter" componentType="javax.faces.Float">
+  <component jsfid="floatConverter" componentType="javax.faces.Float" extends="converter">
     <description>Converts a String value into a java.lang.Float type and back to a String.</description>
   </component>
   <component jsfid="convertFloat" extends="floatConverter"/>
   <component jsfid="f:convertFloat" extends="convertFloat"/>
   
-  <component jsfid="integerConverter" componentType="javax.faces.Integer">
+  <component jsfid="integerConverter" componentType="javax.faces.Integer" extends="converter">
      <description>Converts a string value into an java.lang.Integer type and back to a string.</description>
   </component> 
   <component jsfid="convertInteger" extends="integerConverter"/>
   <component jsfid="f:convertInteger" extends="convertInteger"/>
 
-  <component jsfid="longConverter" componentType="javax.faces.Long">
+  <component jsfid="longConverter" componentType="javax.faces.Long" extends="converter">
     <description>Converts a String value into a java.lang.Long type and back to a String.</description>
   </component>
   <component jsfid="convertLong" extends="longConverter"/>
   <component jsfid="f:convertLong" extends="convertLong"/>
 
-  <component jsfid="numberConverter" componentType="javax.faces.Number">
+  <component jsfid="numberConverter" componentType="javax.faces.Number" extends="converter">
     <description>Converts a String into a number and back to a String.</description>
     <attributes>
        <set name="currencyCode" bindingType="Early">
@@ -1172,13 +1184,13 @@
   <component jsfid="convertNumber" extends="numberConverter"/>
   <component jsfid="f:convertNumber" extends="convertNumber"/>
 
-  <component jsfid="shortConverter" componentType="javax.faces.Short">
+  <component jsfid="shortConverter" componentType="javax.faces.Short" extends="converter">
     <description>Converts a String value into a java.lang.Short type and back to a String.</description>
   </component>
   <component jsfid="convertShort" extends="shortConverter"/>
   <component jsfid="f:convertShort" extends="convertShort"/>
 
-  <component jsfid="dateTimeConverter" componentType="javax.faces.DateTime" >
+  <component jsfid="dateTimeConverter" componentType="javax.faces.DateTime" extends="converter">
     <description>Converts a string value into a java.util.Date type and back to a string.</description>
     <attributes>
       <set name="dateStyle" bindingType="Early">
@@ -1339,7 +1351,7 @@
   </component>	
   <component jsfid="clay:clayForEach" extends="clayForEach"/>
 
-  <component jsfid="doubleRangeValidator" componentType="javax.faces.DoubleRange"> 
+  <component jsfid="doubleRangeValidator" componentType="javax.faces.DoubleRange" extends="validator"> 
      <description>Verifies the submitted value is a double within the specified minimum and maximum values.</description>
      <attributes>
        <set name="maximum" bindingType="Early">
@@ -1353,7 +1365,7 @@
   <component jsfid="validateDoubleRange" extends="doubleRangeValidator"/>
   <component jsfid="f:validateDoubleRange" extends="validateDoubleRange"/>
 
-  <component jsfid="lengthValidator" componentType="javax.faces.Length">
+  <component jsfid="lengthValidator" componentType="javax.faces.Length" extends="validator">
      <description>Verifies the submitted string value is greater than and not less than the specified minimum and maximum values.</description>
      <attributes>
        <set name="maximum" bindingType="Early">
@@ -1367,7 +1379,7 @@
   <component jsfid="validateLength" extends="lengthValidator"/>
   <component jsfid="f:validateLength" extends="validateLength"/>
 
-  <component jsfid="longRangeValidator" componentType="javax.faces.LongRange">
+  <component jsfid="longRangeValidator" componentType="javax.faces.LongRange" extends="validator">
      <description>Verifies the submitted value is a long within the specified minimum and maximum values.</description>
      <attributes>
        <set name="maximum" bindingType="Early">

Modified: shale/framework/trunk/shale-clay/src/main/resources/org/apache/shale/clay/component/chain/shale-clay-config.xml
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/main/resources/org/apache/shale/clay/component/chain/shale-clay-config.xml?view=diff&rev=471910&r1=471909&r2=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/main/resources/org/apache/shale/clay/component/chain/shale-clay-config.xml (original)
+++ shale/framework/trunk/shale-clay/src/main/resources/org/apache/shale/clay/component/chain/shale-clay-config.xml Mon Nov  6 14:44:56 2006
@@ -49,10 +49,10 @@
   <chain           name="createComponent">
 
     <command  className="org.apache.shale.clay.component.chain.CreateComponentCommand"/>
+    <command  className="org.apache.shale.clay.component.chain.AssignPropertiesCommand"/> 
     <command  className="org.apache.shale.clay.component.chain.AssignValidatorsCommand"/>
     <command  className="org.apache.shale.clay.component.chain.AssignValueChangeListenersCommand"/>
     <command  className="org.apache.shale.clay.component.chain.AssignActionListenersCommand"/>
-    <command  className="org.apache.shale.clay.component.chain.AssignPropertiesCommand"/> 
     <command  className="org.apache.shale.clay.component.chain.AssignConverterCommand"/>
 
   </chain>

Added: shale/framework/trunk/shale-clay/src/test/java/org/apache/shale/clay/config/BindingTestCase.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/test/java/org/apache/shale/clay/config/BindingTestCase.java?view=auto&rev=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/test/java/org/apache/shale/clay/config/BindingTestCase.java (added)
+++ shale/framework/trunk/shale-clay/src/test/java/org/apache/shale/clay/config/BindingTestCase.java Mon Nov  6 14:44:56 2006
@@ -0,0 +1,215 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you 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.
+ */
+
+package org.apache.shale.clay.config;
+
+import java.io.StringWriter;
+import java.util.Iterator;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.html.HtmlCommandButton;
+import javax.faces.component.html.HtmlInputText;
+import javax.faces.context.ResponseWriter;
+import javax.faces.convert.Converter;
+import javax.faces.convert.IntegerConverter;
+import javax.faces.event.ActionEvent;
+import javax.faces.event.ActionListener;
+import javax.faces.event.ValueChangeEvent;
+import javax.faces.event.ValueChangeListener;
+import javax.faces.validator.LengthValidator;
+import javax.faces.validator.Validator;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.shale.clay.component.Clay;
+
+public class BindingTestCase extends AbstractTestCaseConfig {
+
+    // Construct a new instance of this test case.
+    public BindingTestCase(String name) {
+        super(name);
+    }
+
+    // Return the tests included in this test case.
+    public static Test suite() {
+        return (new TestSuite(BindingTestCase.class));
+    }
+
+    private HtmlCommandButton command = null;
+    private HtmlInputText input = null;
+    private Converter converter = null;
+    private Validator validator = null;
+    private ActionListener actionListener = null;
+    private ValueChangeListener valueChangeListener = null;
+    
+    
+    
+    private Clay clay = null;
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        // done by the startup context listener
+        loadConfigFiles(null, null);
+
+        clay = (Clay) application
+                .createComponent("org.apache.shale.clay.component.Clay");
+        clay.setId("test");
+        clay.setJsfid("/org/apache/shale/clay/config/binding.html");
+        clay.setManagedBeanName("test");
+        
+        facesContext.getExternalContext().getSessionMap().put("test", this);
+
+        // builds a buffer to write the page to
+        StringWriter writer = new StringWriter();
+        // create a buffered response writer
+        ResponseWriter buffResponsewriter = facesContext.getRenderKit()
+                .createResponseWriter(writer, null,
+                        response.getCharacterEncoding());
+        // push buffered writer to the faces context
+        facesContext.setResponseWriter(buffResponsewriter);
+        // start a document
+        buffResponsewriter.startDocument();
+
+        // build subtree
+        clay.encodeBegin(facesContext);
+    }
+
+    public void testInputBindings() {
+        HtmlInputText findInput = (HtmlInputText) findComponent(clay, "input");
+        assertNotNull(findInput);
+        assertTrue(getInput() == findInput);
+        
+        assertEquals(1, findInput.getValidators().length);
+        assertTrue(getValidator() == findInput.getValidators()[0]);
+
+        // test the property template override 
+        assertEquals(100, ((LengthValidator) getValidator()).getMaximum());
+        
+        assertNotNull(findInput.getConverter());
+        assertTrue(getConverter() == findInput.getConverter());
+        
+        assertEquals(1, findInput.getValueChangeListeners().length);
+        assertTrue(getValueChangeListener() == findInput.getValueChangeListeners()[0]);      
+    }
+    
+    public void testCommandBindings() {
+        HtmlCommandButton findCommand = (HtmlCommandButton) findComponent(clay, "command");
+        assertNotNull(findCommand);
+        
+        assertEquals(1, findCommand.getActionListeners().length);
+        assertTrue(getActionListener() == findCommand.getActionListeners()[0]);
+    }
+    
+    public ActionListener getActionListener() {
+        if (actionListener == null) {
+            actionListener = new ActionListener() {
+               public void processAction(ActionEvent event) {
+                   
+               };  
+            };
+        }
+        return actionListener;
+    }
+
+    public void setActionListener(ActionListener actionListener) {
+        this.actionListener = actionListener;
+    }
+
+    public HtmlCommandButton getCommand() {
+        if (command == null) {
+            command = new HtmlCommandButton();
+        }
+        return command;
+    }
+
+    public void setCommand(HtmlCommandButton command) {
+        this.command = command;
+    }
+
+    public Converter getConverter() {
+        if (converter == null) {
+            converter = new IntegerConverter();    
+        }
+        return converter;
+    }
+
+    public void setConverter(Converter converter) {
+        this.converter = converter;
+    }
+
+    public HtmlInputText getInput() {
+        if (input == null) {
+            input = new HtmlInputText();
+        }
+        return input;
+    }
+
+    public void setInput(HtmlInputText input) {
+        this.input = input;
+    }
+
+    public Validator getValidator() {
+        if (validator == null) {
+            validator = new LengthValidator(5, 1);    
+        }
+        return validator;
+    }
+
+    public void setValidator(Validator validator) {
+        this.validator = validator;
+    }
+
+    public ValueChangeListener getValueChangeListener() {
+        if (valueChangeListener == null) {
+            valueChangeListener = new ValueChangeListener() {
+                public void processValueChange(ValueChangeEvent event) {
+                    
+                };
+            };
+        }
+        return valueChangeListener;
+    }
+
+    public void setValueChangeListener(ValueChangeListener valueChangeListener) {
+        this.valueChangeListener = valueChangeListener;
+    }
+
+    
+    private UIComponent findComponent(UIComponent parent, String id) {
+        if (parent == null) {
+            return null;
+        }
+
+        if (parent.getId() != null && parent.getId().equals(id)) {
+            return parent;
+        } else {
+            Iterator ci = parent.getChildren().iterator();
+            while (ci.hasNext()) {
+                UIComponent child = (UIComponent) ci.next();
+                UIComponent target = findComponent(child, id);
+                if (target != null) {
+                    return target;
+                }
+            }
+        }
+
+        return null;
+    }
+
+
+}

Propchange: shale/framework/trunk/shale-clay/src/test/java/org/apache/shale/clay/config/BindingTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: shale/framework/trunk/shale-clay/src/test/java/org/apache/shale/clay/config/BindingTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: shale/framework/trunk/shale-clay/src/test/resources/org/apache/shale/clay/config/binding.html
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-clay/src/test/resources/org/apache/shale/clay/config/binding.html?view=auto&rev=471910
==============================================================================
--- shale/framework/trunk/shale-clay/src/test/resources/org/apache/shale/clay/config/binding.html (added)
+++ shale/framework/trunk/shale-clay/src/test/resources/org/apache/shale/clay/config/binding.html Mon Nov  6 14:44:56 2006
@@ -0,0 +1,40 @@
+<!-- ### clay:page charset="UTF-8" /### -->
+<!-- ### clay:remove ### -->
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you 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.
+-->
+<html>
+<head>
+  <title>Mock Logon Title</title>
+</head>
+<!-- ### /clay:remove ### -->
+<body jsfid="void" 
+         xmlns:f="http://java.sun.com/jsf/core" 
+         xmlns:h="http://java.sun.com/jsf/html">
+<form id="logonForm">
+    <h:inputText id="input" binding="#{@managed-bean-name.input}">
+        <f:converter binding="#{@managed-bean-name.converter}" />
+        <f:validateLength binding="#{@managed-bean-name.validator}" maximum="100"/>
+        <f:valueChangeListener binding="#{@managed-bean-name.valueChangeListener}"/>
+    </h:inputText>
+    <h:commandButton id="command" binding="#{@managed-bean-name.command}">
+       <f:actionListener binding="#{@managed-bean-name.actionListener}"/>
+    </h:commandButton>
+</form>
+</body>
+<!-- ### clay:remove ### -->
+</html>
+<!-- ### /clay:remove ### -->

Propchange: shale/framework/trunk/shale-clay/src/test/resources/org/apache/shale/clay/config/binding.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: shale/framework/trunk/shale-clay/src/test/resources/org/apache/shale/clay/config/binding.html
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL