Author: gvanmatre
Date: Sun Jun 18 20:13:33 2006
New Revision: 415235

URL: http://svn.apache.org/viewvc?rev=415235&view=rev
Log:
Fix for issue Shale-194 reported by Jack Cheng.

Added:
    
struts/shale/trunk/shale-core/src/main/resources/org/apache/shale/validator/validateUtilities.js
   (with props)
Modified:
    
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/WEB-INF/clay-config.xml
    
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/hrolodex.html
    
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/jrolodex.html
    
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/jsprolodex.jsp
    
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/xhrolodex.html
    
struts/shale/trunk/shale-apps/shale-usecases/src/main/webapp/validator/test.jsp
    
struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/Builder.java
    
struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/ElementBuilder.java
    
struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java
    
struts/shale/trunk/shale-core/src/main/java/org/apache/shale/component/ValidatorScript.java
    
struts/shale/trunk/shale-core/src/main/resources/org/apache/shale/validator/validator-rules.xml
    
struts/shale/trunk/shale-core/src/test/java/org/apache/shale/validator/CommonsValidatorTestCase.java

Modified: 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/WEB-INF/clay-config.xml
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/WEB-INF/clay-config.xml?rev=415235&r1=415234&r2=415235&view=diff
==============================================================================
--- 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/WEB-INF/clay-config.xml
 (original)
+++ 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/WEB-INF/clay-config.xml
 Sun Jun 18 20:13:33 2006
@@ -347,6 +347,14 @@
                        <set name="maxlength" value="50" />
                        <set name="required" value="false" />
                </attributes>
+               <validator jsfid="commonsValidator">
+                  <attributes>
+                     <set name="type" value="email"/>
+                     <set name="client" value="true"/>
+                     <set name="server" value="true"/>         
+                     <set name="arg" value="#{messages['rolodex.email']}"/>    
  
+                  </attributes>
+               </validator>
        </component>
        <component jsfid="emailMessage" extends="baseMessage">
                <attributes>
@@ -613,6 +621,16 @@
                        <set name="value"
                                value="[EMAIL PROTECTED]" />
                        <set name="required" value="false" />
+                       
+                   <validator jsfid="commonsValidator">
+                      <attributes>
+                         <set name="type" value="email"/>
+                         <set name="client" value="true"/>
+                         <set name="server" value="true"/>             
+                         <set name="arg" 
value="#{messages['rolodex.email']}"/>      
+                      </attributes>
+               </validator>
+                       
                </attributes>
        </component>
        <component jsfid="contactEmailMessage" extends="message"
@@ -985,5 +1003,11 @@
                        <set name="for" value="businessCountry" />
                </attributes>
        </component>
+
+    <component jsfid="script" extends="validatorScript">
+       <attributes>
+          <set name="functionName" value="validateForm"/>
+       </attributes>
+    </component>
 
 </view>

Modified: 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/hrolodex.html
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/hrolodex.html?rev=415235&r1=415234&r2=415235&view=diff
==============================================================================
--- 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/hrolodex.html
 (original)
+++ 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/hrolodex.html
 Sun Jun 18 20:13:33 2006
@@ -130,8 +130,8 @@
 </style>
 </head>
 <body class="section-1">
-<form action=""><a jsfid="commandLink" action="home" allowBody="true"
-       immediate="true">Back</a><br>
+<form onsubmit="return validateForm(this);">
+<a jsfid="commandLink" action="home" allowBody="true" 
immediate="true">Back</a><br>
 <br>
 <span jsfid="tabs">
 <ul id="menu">
@@ -313,5 +313,6 @@
 </table>
 </div>
 </form>
+<span jsfid="script"/>
 </body>
 </html>

Modified: 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/jrolodex.html
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/jrolodex.html?rev=415235&r1=415234&r2=415235&view=diff
==============================================================================
--- 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/jrolodex.html
 (original)
+++ 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/jrolodex.html
 Sun Jun 18 20:13:33 2006
@@ -1,7 +1,8 @@
 <html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en"
        xmlns:f="http://java.sun.com/jsf/core";
        xmlns:h="http://java.sun.com/jsf/html";
-       xmlns:clay="http://struts.apache.org/shale/clay-plugin";>
+       xmlns:clay="http://struts.apache.org/shale/clay-plugin";
+       xmlns:s="http://struts.apache.org/shale/core";>
 <head>
 <clay:loadBundle basename="org.apache.shale.usecases.view.Bundle"
        var="messages" />
@@ -133,8 +134,8 @@
 </style>
 </head>
 <body class="section-1">
-<form action=""><h:commandLink action="home" allowBody="true"
-       immediate="true" value="Back" /><br />
+<form onsubmit="return validateForm(this);">
+<h:commandLink action="home" allowBody="true" immediate="true" value="Back" 
/><br />
 <br />
 <clay:clay shapeValidator="[EMAIL PROTECTED]" />
 <div id="contents">
@@ -176,7 +177,11 @@
                                        value="#{messages['rolodex.email']}" 
extends="baseLabel" /></td>
                                <td><h:inputText id="contactEmail"
                                        value="[EMAIL PROTECTED]"
-                                       required="false" size="30" 
maxlength="50" /></td>
+                                       required="false" size="30" 
maxlength="50">
+                                          <f:validate 
extends="commonsValidator" type="email"  
+                                               client="true" server="true" 
arg="#{messages['rolodex.email']}"/>
+                                       </h:inputText>
+                                       </td>
                                <td><h:message for="contactEmail" 
extends="baseMessage" /></td>
                        </tr>
                </table>
@@ -345,5 +350,6 @@
 </table>
 </div>
 </form>
+<s:validatorScript functionName="validateForm"/>
 </body>
 </html>

Modified: 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/jsprolodex.jsp
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/jsprolodex.jsp?rev=415235&r1=415234&r2=415235&view=diff
==============================================================================
--- 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/jsprolodex.jsp
 (original)
+++ 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/jsprolodex.jsp
 Sun Jun 18 20:13:33 2006
@@ -142,7 +142,7 @@
   <f:loadBundle var="messages" 
basename="org.apache.shale.usecases.view.Bundle"/>
        <body class="section-1">
 
-       <h:form>
+       <h:form onsubmit="return validateForm(this);">
         <h:commandLink action="home" value="Back" immediate="true"/><br/><br/>
 
                <!-- Example of the runtime option.  The createTabs method 
binding event builds the tab links 
@@ -178,6 +178,7 @@
                        </h:panelGrid>
                </h:panelGrid></div>
        </h:form>
+       <s:validatorScript functionName="validateForm"/>
        </body>
 </f:view>
 </html>

Modified: 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/xhrolodex.html
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/xhrolodex.html?rev=415235&r1=415234&r2=415235&view=diff
==============================================================================
--- 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/xhrolodex.html
 (original)
+++ 
struts/shale/trunk/shale-apps/shale-clay-usecases/src/main/webapp/rolodex/xhrolodex.html
 Sun Jun 18 20:13:33 2006
@@ -130,7 +130,7 @@
 </style>
 </head>
 <body class="section-1">
-<form id="rolodex" action=""><a jsfid="commandLink" action="home"
+<form id="rolodex" onsubmit="return validateForm(this);"><a 
jsfid="commandLink" action="home"
        allowBody="true" immediate="true">Back</a><br>
 <br>
 <span jsfid="clay" allowBody="false" managedBeanName="rolodex$xhrolodex"
@@ -189,7 +189,7 @@
                                <td><label id="contactEmailLabel" 
style="color:#99CC66"
                                        allowBody="false" for="contactEmail"
                                        
value="#{messages['rolodex.email']}">Email:</label></td>
-                               <td><input type="text" size="30" maxlength="50" 
id="contactEmail"
+                               <td><input jsfid="contactEmail" type="text" 
size="30" maxlength="50" id="contactEmail"
                                        value="[EMAIL PROTECTED]"
                                        required="false"></td>
                                <td><span id="contactEmailMessage" 
style="color:red" jsfid="message"
@@ -384,5 +384,6 @@
 </table>
 </div>
 </form>
+<span jsfid="validatorScript" functionName="validateForm"/>
 </body>
 </html>

Modified: 
struts/shale/trunk/shale-apps/shale-usecases/src/main/webapp/validator/test.jsp
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/shale-apps/shale-usecases/src/main/webapp/validator/test.jsp?rev=415235&r1=415234&r2=415235&view=diff
==============================================================================
--- 
struts/shale/trunk/shale-apps/shale-usecases/src/main/webapp/validator/test.jsp 
(original)
+++ 
struts/shale/trunk/shale-apps/shale-usecases/src/main/webapp/validator/test.jsp 
Sun Jun 18 20:13:33 2006
@@ -30,7 +30,7 @@
 </title>
 </head>
 <body>
-
+  <f:subview id="subview">
   <h:form                 id="form" 
                     onsubmit="return validateForm(this);">
 
@@ -159,7 +159,7 @@
                    functionName="validateForm"/>
 
   </h:form>
-
+</f:subview>
 </body>
 </html>
 </f:view>

Modified: 
struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/Builder.java
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/Builder.java?rev=415235&r1=415234&r2=415235&view=diff
==============================================================================
--- 
struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/Builder.java
 (original)
+++ 
struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/Builder.java
 Sun Jun 18 20:13:33 2006
@@ -289,7 +289,7 @@
      * component, an object representation of the XML configuration.
      * </p>
      */    
-    protected void assignAttributes(Node node, ElementBean target) {
+    protected void assignAttributes(Node node, ComponentBean target) {
         // override with html attributes
        
         Iterator ai = node.getAttributes().entrySet().iterator();

Modified: 
struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/ElementBuilder.java
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/ElementBuilder.java?rev=415235&r1=415234&r2=415235&view=diff
==============================================================================
--- 
struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/ElementBuilder.java
 (original)
+++ 
struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/ElementBuilder.java
 Sun Jun 18 20:13:33 2006
@@ -165,6 +165,8 @@
                     new Object[] {node.getToken(), 
node.getToken().getRawText()}));              
         }  
         
+        assignAttributes(node, target);
+        
         //look for attributes
         Iterator ci = node.getChildren().iterator();
         while (ci.hasNext()) {

Modified: 
struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java?rev=415235&r1=415234&r2=415235&view=diff
==============================================================================
--- 
struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java
 (original)
+++ 
struts/shale/trunk/shale-clay/src/main/java/org/apache/shale/clay/parser/builder/JsfDefaultBuilder.java
 Sun Jun 18 20:13:33 2006
@@ -244,7 +244,8 @@
                 } else if (child.getName().startsWith("convert")) {
                     addConverter(child, target);
                     deleteList.add(child);    
-                } else if (child.getName().startsWith("validate")) {
+                } else if (child.getName().startsWith("validate") ||
+                           child.getName().equals("commonsValidator")) {
                     addValidator(child, target);
                     deleteList.add(child);    
                 } else if (child.getName().equals("actionListener")) {

Modified: 
struts/shale/trunk/shale-core/src/main/java/org/apache/shale/component/ValidatorScript.java
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/shale-core/src/main/java/org/apache/shale/component/ValidatorScript.java?rev=415235&r1=415234&r2=415235&view=diff
==============================================================================
--- 
struts/shale/trunk/shale-core/src/main/java/org/apache/shale/component/ValidatorScript.java
 (original)
+++ 
struts/shale/trunk/shale-core/src/main/java/org/apache/shale/component/ValidatorScript.java
 Sun Jun 18 20:13:33 2006
@@ -28,6 +28,7 @@
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIComponentBase;
 import javax.faces.component.UIForm;
+import javax.faces.component.UINamingContainer;
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
 import javax.faces.el.ValueBinding;
@@ -458,7 +459,6 @@
        
    }
    
-
     /**
      * <p>Writes the JavaScript parameters for the client-side
      *    validation code.</p>
@@ -530,7 +530,7 @@
 
        if ((parent = component.getParent()) != null) {
           if (parent instanceof UIForm)  
-             return parent.getClientId(context);   
+             return 
parent.getClientId(context).replace(UINamingContainer.SEPARATOR_CHAR, '_');   
           else
              return findForm(context, parent);
        }

Added: 
struts/shale/trunk/shale-core/src/main/resources/org/apache/shale/validator/validateUtilities.js
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/shale-core/src/main/resources/org/apache/shale/validator/validateUtilities.js?rev=415235&view=auto
==============================================================================
--- 
struts/shale/trunk/shale-core/src/main/resources/org/apache/shale/validator/validateUtilities.js
 (added)
+++ 
struts/shale/trunk/shale-core/src/main/resources/org/apache/shale/validator/validateUtilities.js
 Sun Jun 18 20:13:33 2006
@@ -0,0 +1,140 @@
+  /**
+  * This is a place holder for common utilities used across the javascript 
validation
+  *
+  **/
+
+  /**
+   * Retreive the name of the form
+   * @param form The form validation is taking place on.
+   */
+  function jcv_retrieveFormName(form) {
+
+      // Please refer to Bugs 31534, 35127, 35294, 37315 & 38159
+      // for the history of the following code
+
+      var formName;
+
+      if (form.getAttributeNode) {
+          if (form.getAttributeNode("id") && 
form.getAttributeNode("id").value) {
+              formName = form.getAttributeNode("id").value;
+          } else {
+              formName = form.getAttributeNode("name").value;
+          }
+      } else if (form.getAttribute) {
+          if (form.getAttribute("id")) {
+              formName = form.getAttribute("id");
+          } else {
+              formName = form.attributes["name"];
+          }
+      } else {
+          if (form.id) {
+              formName = form.id;
+          } else {
+              formName = form.name;
+          }
+      }
+
+      re = /:/gi;
+      return formName.replace(re, "_");
+      
+  }  
+
+  /**
+   * Handle error messages.
+   * @param messages Array of error messages.
+   * @param focusField Field to set focus on.
+   */
+  function jcv_handleErrors(messages, focusField) {
+      if (focusField && focusField != null) {
+          var doFocus = true;
+          if (focusField.disabled || focusField.type == 'hidden') {
+              doFocus = false;
+          }
+          if (doFocus && 
+              focusField.style && 
+              focusField.style.visibility &&
+              focusField.style.visibility == 'hidden') {
+              doFocus = false;
+          }
+          if (doFocus) {
+              focusField.focus();
+          }
+      }
+      alert(messages.join('\n'));
+  }
+
+  /**
+   * Checks that the array element is a valid
+   * Commons Validator element and not one inserted by
+   * other JavaScript libraries (for example the
+   * prototype library inserts an "extends" into
+   * all objects, including Arrays).
+   * @param name The element name.
+   * @param value The element value.
+   */
+  function jcv_verifyArrayElement(name, element) {
+      if (element && element.length && element.length == 3) {
+          return true;
+      } else {
+          return false;
+      }
+  }
+
+  /**
+   * Checks whether the field is present on the form.
+   * @param field The form field.
+   */
+  function jcv_isFieldPresent(field) {
+      var fieldPresent = true;
+      if (field == null || field == undefined) {
+          fieldPresent = false;
+      } else {
+          if (field.disabled) {
+              fieldPresent = false;
+          }
+      }
+      return fieldPresent;
+  }
+
+  /**
+   * Check a value only contains valid numeric digits
+   * @param argvalue The value to check.
+   */
+  function jcv_isAllDigits(argvalue) {
+      argvalue = argvalue.toString();
+      var validChars = "0123456789";
+      var startFrom = 0;
+      if (argvalue.substring(0, 2) == "0x") {
+         validChars = "0123456789abcdefABCDEF";
+         startFrom = 2;
+      } else if (argvalue.charAt(0) == "0") {
+         validChars = "01234567";
+         startFrom = 1;
+      } else if (argvalue.charAt(0) == "-") {
+          startFrom = 1;
+      }
+
+      for (var n = startFrom; n < argvalue.length; n++) {
+          if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return 
false;
+      }
+      return true;
+  }
+
+  /**
+   * Check a value only contains valid decimal digits
+   * @param argvalue The value to check.
+   */
+  function jcv_isDecimalDigits(argvalue) {
+      argvalue = argvalue.toString();
+      var validChars = "0123456789";
+
+      var startFrom = 0;
+      if (argvalue.charAt(0) == "-") {
+          startFrom = 1;
+      }
+
+      for (var n = startFrom; n < argvalue.length; n++) {
+          if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return 
false;
+      }
+      return true;
+  }

Propchange: 
struts/shale/trunk/shale-core/src/main/resources/org/apache/shale/validator/validateUtilities.js
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
struts/shale/trunk/shale-core/src/main/resources/org/apache/shale/validator/validateUtilities.js
------------------------------------------------------------------------------
    svn:keywords = author date id

Modified: 
struts/shale/trunk/shale-core/src/main/resources/org/apache/shale/validator/validator-rules.xml
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/shale-core/src/main/resources/org/apache/shale/validator/validator-rules.xml?rev=415235&r1=415234&r2=415235&view=diff
==============================================================================
--- 
struts/shale/trunk/shale-core/src/main/resources/org/apache/shale/validator/validator-rules.xml
 (original)
+++ 
struts/shale/trunk/shale-core/src/main/resources/org/apache/shale/validator/validator-rules.xml
 Sun Jun 18 20:13:33 2006
@@ -173,7 +173,7 @@
                   methodParams=""
                   depends=""
                   msg=""
-                  
jsFunction="org.apache.commons.validator.javascript.validateUtilities"/>
+                  jsFunction="org.apache.shale.validator.validateUtilities"/>
 
        </global>
 

Modified: 
struts/shale/trunk/shale-core/src/test/java/org/apache/shale/validator/CommonsValidatorTestCase.java
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/shale-core/src/test/java/org/apache/shale/validator/CommonsValidatorTestCase.java?rev=415235&r1=415234&r2=415235&view=diff
==============================================================================
--- 
struts/shale/trunk/shale-core/src/test/java/org/apache/shale/validator/CommonsValidatorTestCase.java
 (original)
+++ 
struts/shale/trunk/shale-core/src/test/java/org/apache/shale/validator/CommonsValidatorTestCase.java
 Sun Jun 18 20:13:33 2006
@@ -23,6 +23,7 @@
 import javax.faces.application.FacesMessage;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIInput;
+import javax.faces.component.UINamingContainer;
 import javax.faces.component.UIViewRoot;
 import javax.faces.component.html.HtmlForm;
 import javax.faces.component.html.HtmlInputText;
@@ -44,6 +45,7 @@
 
     
     protected static final Object[] COMPONENTS = {
+        new String[] {"javax.faces.NamingContainer", 
"javax.faces.component.UINamingContainer"},
         new String[] {"javax.faces.HtmlInputText", 
"javax.faces.component.html.HtmlInputText"},
         new String[] {"org.apache.shale.ValidatorScript", 
"org.apache.shale.component.ValidatorScript"},
         new String[] {"javax.faces.HtmlForm", 
"javax.faces.component.html.HtmlForm"},
@@ -1075,10 +1077,16 @@
         // find the view root
         UIViewRoot root = facesContext.getViewRoot();
         assertNotNull(root);
+
+        UINamingContainer namingContainer = (UINamingContainer) 
application.createComponent("javax.faces.NamingContainer");
         
+        namingContainer.setId(root.createUniqueId());
+        root.getChildren().add(root.getChildCount(), namingContainer);
+
         //create a form 1
-        UIComponent form1 = this.createForm("test1", root);
-         
+        UIComponent form1 = this.createForm("test1", namingContainer);
+        
+        
         //create a dummy component 1
         HtmlInputText component1 = createInputText("email", form1);
                


Reply via email to