You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2006/07/07 19:48:35 UTC
svn commit: r419933 - in /tapestry/tapestry4/trunk:
tapestry-examples/Workbench/src/context/
tapestry-examples/Workbench/src/context/WEB-INF/
tapestry-framework/src/java/org/apache/tapestry/form/
tapestry-framework/src/java/org/apache/tapestry/form/tra...
Author: jkuhnert
Date: Fri Jul 7 10:48:34 2006
New Revision: 419933
URL: http://svn.apache.org/viewvc?rev=419933&view=rev
Log:
Validation logic refactor for number translations
Removed:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.js
Modified:
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Fields.html
tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Border.html
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstants.java
tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/validate/common.js
tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form/validation.js
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java
Modified: tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Fields.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Fields.html?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Fields.html (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/Fields.html Fri Jul 7 10:48:34 2006
@@ -53,7 +53,7 @@
<tr>
<th><label jwcid="@FieldLabel" accessKey="z" field="component:zipCode"/></th>
- <td><input jwcid="zipCode" id="zipcode"/></td>
+ <td><input jwcid="zipCode" /></td>
</tr>
<tr>
Modified: tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Border.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Border.html?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Border.html (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Border.html Fri Jul 7 10:48:34 2006
@@ -1,4 +1,5 @@
-<html jwcid="@Shell" stylesheet="asset:stylesheet" title="message:window.title">
+<html jwcid="@Shell" stylesheet="asset:stylesheet"
+ title="message:window.title" browserLogLevel="literal:DEBUG" >
<body jwcid="@Body">
<table class="tabs" cellspacing="0" border="0">
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponent.java Fri Jul 7 10:48:34 2006
@@ -75,14 +75,14 @@
{
// If the user explicitly sets the id parameter to null, then
// we honor that!
-
+
String rawId = getIdParameter();
-
+
if (rawId == null)
return;
-
+
String id = cycle.getUniqueId(TapestryUtils.convertTapestryIdToNMToken(rawId));
-
+
// Store for later access by the FieldLabel (or JavaScript).
setClientId(id);
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractFormComponentContributor.java Fri Jul 7 10:48:34 2006
@@ -17,6 +17,8 @@
import org.apache.hivemind.util.PropertyUtils;
import org.apache.tapestry.IMarkupWriter;
import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.json.JSONArray;
+import org.apache.tapestry.json.JSONObject;
/**
* Abstract {@link FormComponentContributor} implementation that adds an optional static javscript
@@ -43,7 +45,7 @@
* Defines the default JavaScript file used by this contributor. Overriden by most subclasses
* that use JavaScript.
*/
- protected String defaultScript()
+ public String defaultScript()
{
return null;
}
@@ -68,5 +70,43 @@
{
if (_script != null)
context.includeClasspathScript(_script);
+ }
+
+ /**
+ * Utility used to append onto an existing property represented as an
+ * object array.
+ * @param profile
+ * @param key
+ * @param value
+ */
+ public void accumulateProperty(JSONObject profile, String key, Object value)
+ {
+ if (!profile.has(key))
+ profile.put(key, new JSONArray());
+
+ profile.accumulate(key, value);
+ }
+
+ /**
+ * Utility method to store a field specific profile property which can later
+ * be used by client side validation.
+ *
+ * @param field
+ * The field to store the property for, will key off of {@link IFormComponent#getClientId()}.
+ * @param profile
+ * The profile for the form.
+ * @param key
+ * The property key to store.
+ * @param property
+ * The property to store.
+ */
+ public void setProfileProperty(IFormComponent field, JSONObject profile,
+ String key, Object property)
+ {
+ if (!profile.has(field.getClientId()))
+ profile.put(field.getClientId(), new JSONObject());
+
+ JSONObject fieldProps = profile.getJSONObject(field.getClientId());
+ fieldProps.put(key, property);
}
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java Fri Jul 7 10:48:34 2006
@@ -23,6 +23,8 @@
import org.apache.tapestry.form.FormComponentContributorContext;
import org.apache.tapestry.form.IFormComponent;
import org.apache.tapestry.form.ValidationMessages;
+import org.apache.tapestry.json.JSONObject;
+import org.apache.tapestry.valid.ValidationConstants;
import org.apache.tapestry.valid.ValidatorException;
/**
@@ -102,8 +104,7 @@
protected Object[] getMessageParameters(Locale locale, String label)
{
- return new Object[]
- { label };
+ return new Object[] { label };
}
/**
@@ -114,10 +115,12 @@
FormComponentContributorContext context, IFormComponent field)
{
super.renderContribution(writer, cycle, context, field);
-
- if (_trim)
- context.addSubmitHandler("function (event) { Tapestry.trim_field_value('"
- + field.getClientId() + "'); }");
+
+ if (!_trim) {
+ JSONObject profile = context.getProfile();
+
+ accumulateProperty(profile, ValidationConstants.TRIM, field.getClientId());
+ }
}
public boolean isTrim()
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/DateTranslator.java Fri Jul 7 10:48:34 2006
@@ -30,17 +30,17 @@
*/
public class DateTranslator extends FormatTranslator
{
-
+
public DateTranslator()
{
}
-
+
// Needed until HIVEMIND-134 fix is available
public DateTranslator(String initializer)
{
super(initializer);
}
-
+
/**
* @see org.apache.tapestry.form.translator.FormatTranslator#defaultPattern()
*/
@@ -48,7 +48,7 @@
{
return "MM/dd/yyyy";
}
-
+
/**
* @see org.apache.tapestry.form.translator.FormatTranslator#getFormat(java.util.Locale)
*/
@@ -56,12 +56,12 @@
{
return getDateFormat(locale);
}
-
+
public SimpleDateFormat getDateFormat(Locale locale)
{
return new SimpleDateFormat(getPattern(), new DateFormatSymbols(locale));
}
-
+
/**
* @see org.apache.tapestry.form.translator.FormatTranslator#getMessageKey()
*/
@@ -69,7 +69,7 @@
{
return ValidationStrings.INVALID_DATE;
}
-
+
/**
* @see org.apache.tapestry.form.translator.AbstractTranslator#getMessageParameters(java.util.Locale,
* java.lang.String)
@@ -77,9 +77,8 @@
protected Object[] getMessageParameters(Locale locale, String label)
{
String pattern = getDateFormat(locale).toLocalizedPattern().toUpperCase(locale);
-
- return new Object[]
- { label, pattern };
+
+ return new Object[] { label, pattern };
}
/**
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/FormatTranslator.java Fri Jul 7 10:48:34 2006
@@ -75,7 +75,7 @@
throws ValidatorException
{
Format format = getFormat(messages.getLocale());
-
+
try
{
return format.parseObject(text);
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java Fri Jul 7 10:48:34 2006
@@ -25,6 +25,9 @@
import org.apache.tapestry.TapestryUtils;
import org.apache.tapestry.form.FormComponentContributorContext;
import org.apache.tapestry.form.IFormComponent;
+import org.apache.tapestry.json.JSONLiteral;
+import org.apache.tapestry.json.JSONObject;
+import org.apache.tapestry.valid.ValidationConstants;
import org.apache.tapestry.valid.ValidationConstraint;
import org.apache.tapestry.valid.ValidationStrings;
@@ -63,14 +66,6 @@
}
/**
- * @see org.apache.tapestry.form.AbstractFormComponentContributor#defaultScript()
- */
- protected String defaultScript()
- {
- return "/org/apache/tapestry/form/translator/NumberTranslator.js";
- }
-
- /**
* @see org.apache.tapestry.form.translator.FormatTranslator#defaultPattern()
*/
protected String defaultPattern()
@@ -106,9 +101,8 @@
protected Object[] getMessageParameters(Locale locale, String label)
{
String pattern = getDecimalFormat(locale).toLocalizedPattern();
-
- return new Object[]
- { label, pattern };
+
+ return new Object[] { label, pattern };
}
/**
@@ -120,11 +114,28 @@
FormComponentContributorContext context, IFormComponent field)
{
super.renderContribution(writer, cycle, context, field);
-
+
String message = TapestryUtils.enquote(buildMessage(context, field, getMessageKey()));
-
- context.addSubmitHandler("function(event) { Tapestry.validate_number(event, '"
- + field.getClientId() + "', " + message + "); }");
+
+ JSONObject profile = context.getProfile();
+
+ if (!profile.has(ValidationConstants.CONSTRAINTS)) {
+ profile.put(ValidationConstants.CONSTRAINTS, new JSONObject());
+ }
+ JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
+
+ DecimalFormat format = getDecimalFormat(context.getLocale());
+
+ cons.put(field.getClientId(),
+ new JSONLiteral("[dojo.validate.isRealNumber,{"
+ + "places:" + format.getMaximumIntegerDigits()) + ","
+ + "decimal:"
+ + JSONObject.quote(format.getDecimalFormatSymbols().getDecimalSeparator()) + ","
+ + "separator:" + JSONObject.quote(format.getDecimalFormatSymbols().getGroupingSeparator())
+ + "}]");
+
+ setProfileProperty(field, profile,
+ ValidationConstants.CONSTRAINTS, message);
}
/**
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstants.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstants.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstants.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstants.java Fri Jul 7 10:48:34 2006
@@ -35,4 +35,6 @@
public static final String REQUIRED_MESSAGE = "required-message";
public static final String CONSTRAINTS = "constraints";
+
+ public static final String TRIM = "trim";
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/validate/common.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/validate/common.js?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/validate/common.js (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/validate/common.js Fri Jul 7 10:48:34 2006
@@ -126,7 +126,7 @@
// replace decimal with ".". The minus sign '-' could be the decimal!
pattern = "(\\d)[" + dec + "](\\d)";
value = value.replace(RegExp(pattern, "g"), "$1.$2");
-
+
value = Number(value);
if ( value < min || value > max ) { return false; }
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form/validation.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form/validation.js?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form/validation.js (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/form/validation.js Fri Jul 7 10:48:34 2006
@@ -133,6 +133,9 @@
*/
clearValidationDecorations:function(form, props){
for (var i=0; i<form.elements.length; i++) {
+ if (typeof form.elements[i].type == "undefined"
+ || form.elements[i].type == "submit"
+ || form.elements[i].type == "hidden") { continue; }
dojo.html.removeClass(form.elements[i], this.missingClass);
dojo.html.removeClass(form.elements[i], this.invalidClass);
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java Fri Jul 7 10:48:34 2006
@@ -129,7 +129,7 @@
assertEquals("{\"myfield\":{\"constraints\":\"default message\"},"
+ "\"constraints\":{\"myfield\":[dojo.validate.isInRange,{max:20.0,decimal:\""
- + symbols.getDecimalSeparator() + "\"]}}",
+ + symbols.getDecimalSeparator() + "\"}]}}",
json.toString());
}
@@ -167,7 +167,7 @@
assertEquals("{\"myfield\":{\"constraints\":\"custom\\\\message\"},"
+ "\"constraints\":{\"myfield\":[dojo.validate.isInRange,{max:20.0,decimal:\""
- + symbols.getDecimalSeparator() + "\"]}}",
+ + symbols.getDecimalSeparator() + "\"}]}}",
json.toString());
}
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java?rev=419933&r1=419932&r2=419933&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java Fri Jul 7 10:48:34 2006
@@ -128,7 +128,7 @@
assertEquals("{\"myfield\":{\"constraints\":\"default message\"},"
+ "\"constraints\":{\"myfield\":[dojo.validate.isInRange,{min:20.0,decimal:\""
- + symbols.getDecimalSeparator() + "\"]}}",
+ + symbols.getDecimalSeparator() + "\"}]}}",
json.toString());
}
@@ -166,7 +166,7 @@
assertEquals("{\"myfield\":{\"constraints\":\"custom\\\\message\"},"
+ "\"constraints\":{\"myfield\":[dojo.validate.isInRange,{min:20.0,decimal:\""
- + symbols.getDecimalSeparator() + "\"]}}",
+ + symbols.getDecimalSeparator() + "\"}]}}",
json.toString());
}