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);