You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2005/08/08 19:23:14 UTC
cvs commit: jakarta-tapestry/framework/src/java/org/apache/tapestry/form RequirableFieldSupportImpl.java
hlship 2005/08/08 10:23:14
Modified: . status.xml
framework/src/java/org/apache/tapestry/form/validator
Required.java Email.java MaxLength.java Min.java
Pattern.java Max.java BaseValidator.java
MinLength.java
framework/src/test/org/apache/tapestry/form/validator
TestMax.java TestMinLength.java TestRequired.java
TestMaxLength.java TestPattern.java TestMin.java
TestEmail.java
framework/src/test/org/apache/tapestry/form
TestRequirableFieldSupportImpl.java
framework/src/test/org/apache/tapestry/form/translator
TestNumberTranslator.java
framework/src/java/org/apache/tapestry/form/translator
NumberTranslator.java
framework/src/java/org/apache/tapestry/form
RequirableFieldSupportImpl.java
Log:
TAPESTRY-533: Generated client-side javascript is wrong when error message or field display name contains single-quote characters or backslashes
Revision Changes Path
1.191 +1 -0 jakarta-tapestry/status.xml
Index: status.xml
===================================================================
RCS file: /home/cvs/jakarta-tapestry/status.xml,v
retrieving revision 1.190
retrieving revision 1.191
diff -u -r1.190 -r1.191
--- status.xml 8 Aug 2005 16:12:25 -0000 1.190
+++ status.xml 8 Aug 2005 17:23:13 -0000 1.191
@@ -73,6 +73,7 @@
<action type="fix" dev="HLS" fixes-bug="TAPESTRY-534">WebRequest interface doesn't expose getRemoteUser(), isUserInRole() or getUserPrincipal()</action>
<action type="fix" dev="HLS" fixes-bug="TAPESTRY-530" due-to="Raphael Jean">Namespace messages are retrieved using page's locale rather than engine's locale</action>
<action type="fix" dev="HLS" fixes-bug="TAPESTRY-354">Component w/o .jwc file not visible</action>
+ <action type="fix" dev="HLS" fixes-bug="TAPESTRY-533" due-to="Raphael Jean">Generated client-side javascript is wrong when error message or field display name contains single-quote characters or backslashes</action>
</release>
<release version="4.0-beta-3" date="Jul 22 2005">
<action type="fix" dev="HLS" fixes-bug="TAPESTRY-398" due-to="Jonas Maurus">HiveMind configuration error breaks the useage of the state: binding prefix</action>
1.6 +1 -1 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/Required.java
Index: Required.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/Required.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- Required.java 6 Aug 2005 06:58:26 -0000 1.5
+++ Required.java 8 Aug 2005 17:23:13 -0000 1.6
@@ -73,7 +73,7 @@
StringBuffer buffer = new StringBuffer("function(event) { require(event, ");
buffer.append(context.getFieldDOM());
buffer.append(", '");
- buffer.append(buildMessage(context, field));
+ buffer.append(escapeReservedCharacters(buildMessage(context, field)));
buffer.append("'); }");
context.addSubmitListener(buffer.toString());
1.4 +1 -1 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/Email.java
Index: Email.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/Email.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Email.java 27 Jul 2005 16:28:29 -0000 1.3
+++ Email.java 8 Aug 2005 17:23:13 -0000 1.4
@@ -81,7 +81,7 @@
buffer.append(", '");
buffer.append(pattern);
buffer.append("', '");
- buffer.append(message);
+ buffer.append(escapeReservedCharacters(message));
buffer.append("'); }");
context.addSubmitListener(buffer.toString());
1.4 +1 -1 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/MaxLength.java
Index: MaxLength.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/MaxLength.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- MaxLength.java 9 Jul 2005 20:02:53 -0000 1.3
+++ MaxLength.java 8 Aug 2005 17:23:13 -0000 1.4
@@ -77,7 +77,7 @@
buffer.append(", ");
buffer.append(_maxLength);
buffer.append(", '");
- buffer.append(buildMessage(context, field));
+ buffer.append(escapeReservedCharacters(buildMessage(context, field)));
buffer.append("'); }");
context.addSubmitListener(buffer.toString());
1.4 +1 -1 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/Min.java
Index: Min.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/Min.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Min.java 6 Aug 2005 06:58:26 -0000 1.3
+++ Min.java 8 Aug 2005 17:23:13 -0000 1.4
@@ -77,7 +77,7 @@
buffer.append(", ");
buffer.append(_min);
buffer.append(", '");
- buffer.append(message);
+ buffer.append(escapeReservedCharacters(message));
buffer.append("'); }");
context.addSubmitListener(buffer.toString());
1.3 +1 -1 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/Pattern.java
Index: Pattern.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/Pattern.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Pattern.java 20 Jun 2005 20:20:08 -0000 1.2
+++ Pattern.java 8 Aug 2005 17:23:13 -0000 1.3
@@ -81,7 +81,7 @@
buffer.append(", '");
buffer.append(pattern);
buffer.append("', '");
- buffer.append(message);
+ buffer.append(escapeReservedCharacters(message));
buffer.append("'); }");
context.addSubmitListener(buffer.toString());
1.3 +1 -1 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/Max.java
Index: Max.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/Max.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Max.java 20 Jun 2005 20:20:08 -0000 1.2
+++ Max.java 8 Aug 2005 17:23:13 -0000 1.3
@@ -77,7 +77,7 @@
buffer.append(", ");
buffer.append(_max);
buffer.append(", '");
- buffer.append(message);
+ buffer.append(escapeReservedCharacters(message));
buffer.append("'); }");
context.addSubmitListener(buffer.toString());
1.3 +8 -0 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/BaseValidator.java
Index: BaseValidator.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/BaseValidator.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- BaseValidator.java 6 Aug 2005 06:58:26 -0000 1.2
+++ BaseValidator.java 8 Aug 2005 17:23:13 -0000 1.3
@@ -15,6 +15,7 @@
package org.apache.tapestry.form.validator;
import org.apache.hivemind.util.PropertyUtils;
+import org.apache.hivemind.util.StringUtils;
import org.apache.tapestry.IMarkupWriter;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.form.FormComponentContributorContext;
@@ -68,4 +69,11 @@
{
}
+ protected String escapeReservedCharacters(String message) {
+ // Escape backslashes and single quotes in the message
+ message = StringUtils.replace(message, "\\", "\\\\");
+ message = StringUtils.replace(message, "'", "\\'");
+
+ return message;
+ }
}
1.4 +1 -1 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/MinLength.java
Index: MinLength.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/validator/MinLength.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- MinLength.java 9 Jul 2005 20:02:53 -0000 1.3
+++ MinLength.java 8 Aug 2005 17:23:13 -0000 1.4
@@ -81,7 +81,7 @@
buffer.append(", ");
buffer.append(_minLength);
buffer.append(", '");
- buffer.append(buildMessage(context, field));
+ buffer.append(escapeReservedCharacters(buildMessage(context, field)));
buffer.append("'); }");
context.addSubmitListener(buffer.toString());
1.2 +2 -2 jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestMax.java
Index: TestMax.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestMax.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TestMax.java 20 Jun 2005 15:07:52 -0000 1.1
+++ TestMax.java 8 Aug 2005 17:23:14 -0000 1.2
@@ -138,13 +138,13 @@
ValidationStrings.VALUE_TOO_LARGE,
new Object[]
{ "My Field", new Double(20) },
- "custom message");
+ "custom\\message");
context.getFieldDOM();
contextc.setReturnValue("document.myform.myfield");
context
- .addSubmitListener("function(event) { validate_max_number(event, document.myform.myfield, 20.0, 'custom message'); }");
+ .addSubmitListener("function(event) { validate_max_number(event, document.myform.myfield, 20.0, 'custom\\\\message'); }");
replayControls();
1.3 +2 -2 jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestMinLength.java
Index: TestMinLength.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestMinLength.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TestMinLength.java 9 Jul 2005 20:02:52 -0000 1.2
+++ TestMinLength.java 8 Aug 2005 17:23:14 -0000 1.3
@@ -140,10 +140,10 @@
ValidationStrings.VALUE_TOO_SHORT,
new Object[]
{ new Integer(25), "My Field" },
- "custom message");
+ "custom\\message");
context
- .addSubmitListener("function(event) { validate_min_length(event, document.myform.myfield, 25, 'custom message'); }");
+ .addSubmitListener("function(event) { validate_min_length(event, document.myform.myfield, 25, 'custom\\\\message'); }");
replayControls();
1.5 +2 -2 jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestRequired.java
Index: TestRequired.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestRequired.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TestRequired.java 21 Jul 2005 13:17:58 -0000 1.4
+++ TestRequired.java 8 Aug 2005 17:23:14 -0000 1.5
@@ -122,10 +122,10 @@
ValidationStrings.REQUIRED_TEXT_FIELD,
new Object[]
{ "Fred" },
- "Default Message for Fred.");
+ "Default\\Message for Fred.");
context
- .addSubmitListener("function(event) { require(event, document.fred.barney, 'Default Message for Fred.'); }");
+ .addSubmitListener("function(event) { require(event, document.fred.barney, 'Default\\\\Message for Fred.'); }");
replayControls();
1.3 +2 -2 jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestMaxLength.java
Index: TestMaxLength.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestMaxLength.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TestMaxLength.java 9 Jul 2005 20:02:52 -0000 1.2
+++ TestMaxLength.java 8 Aug 2005 17:23:14 -0000 1.3
@@ -106,10 +106,10 @@
contextc.setReturnValue("document.myform.myfield");
trainFormatMessage(contextc, context, null, ValidationStrings.VALUE_TOO_LONG, new Object[]
- { new Integer(20), "My Field" }, "default message");
+ { new Integer(20), "My Field" }, "default\\message");
context
- .addSubmitListener("function(event) { validate_max_length(event, document.myform.myfield, 20, 'default message'); }");
+ .addSubmitListener("function(event) { validate_max_length(event, document.myform.myfield, 20, 'default\\\\message'); }");
replayControls();
1.2 +2 -2 jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestPattern.java
Index: TestPattern.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestPattern.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TestPattern.java 20 Jun 2005 16:32:05 -0000 1.1
+++ TestPattern.java 8 Aug 2005 17:23:14 -0000 1.2
@@ -152,14 +152,14 @@
ValidationStrings.REGEX_MISMATCH,
new Object[]
{ "Fred" },
- "custom message");
+ "custom\\message");
context.getFieldDOM();
contextc.setReturnValue("document.fred.barney");
context
.addSubmitListener("function(event) { validate_regexp(event, document.fred.barney, '"
- + pattern + "', 'custom message'); }");
+ + pattern + "', 'custom\\\\message'); }");
replayControls();
1.2 +2 -2 jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestMin.java
Index: TestMin.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestMin.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TestMin.java 20 Jun 2005 15:07:52 -0000 1.1
+++ TestMin.java 8 Aug 2005 17:23:14 -0000 1.2
@@ -137,13 +137,13 @@
ValidationStrings.VALUE_TOO_SMALL,
new Object[]
{ "My Field", new Double(20) },
- "custom message");
+ "custom\\message");
context.getFieldDOM();
contextc.setReturnValue("document.myform.myfield");
context
- .addSubmitListener("function(event) { validate_min_number(event, document.myform.myfield, 20.0, 'custom message'); }");
+ .addSubmitListener("function(event) { validate_min_number(event, document.myform.myfield, 20.0, 'custom\\\\message'); }");
replayControls();
1.3 +2 -2 jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestEmail.java
Index: TestEmail.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/form/validator/TestEmail.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TestEmail.java 27 Jul 2005 16:28:29 -0000 1.2
+++ TestEmail.java 8 Aug 2005 17:23:14 -0000 1.3
@@ -113,14 +113,14 @@
IFormComponent field = newField("Fred");
trainFormatMessage(contextc, context, null, ValidationStrings.INVALID_EMAIL, new Object[]
- { "Fred" }, "default message");
+ { "Fred" }, "default\\message");
context.getFieldDOM();
contextc.setReturnValue("document.fred.barney");
context
.addSubmitListener("function(event) { validate_regex(event, document.fred.barney, '"
- + pattern + "', 'default message'); }");
+ + pattern + "', 'default\\\\message'); }");
replayControls();
1.6 +2 -2 jakarta-tapestry/framework/src/test/org/apache/tapestry/form/TestRequirableFieldSupportImpl.java
Index: TestRequirableFieldSupportImpl.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/form/TestRequirableFieldSupportImpl.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- TestRequirableFieldSupportImpl.java 21 Jul 2005 13:17:56 -0000 1.5
+++ TestRequirableFieldSupportImpl.java 8 Aug 2005 17:23:14 -0000 1.6
@@ -140,7 +140,7 @@
_componentControl.setReturnValue("fieldName");
_component.getRequiredMessage();
- _componentControl.setReturnValue("You must enter a value for {0}.");
+ _componentControl.setReturnValue("You must enter a value for {0}. Isn''t it?");
_component.getDisplayName();
_componentControl.setReturnValue("Field Name");
@@ -148,7 +148,7 @@
_form
.addEventHandler(
FormEventType.SUBMIT,
- "require(event, document.formName.fieldName,'You must enter a value for Field Name.')");
+ "require(event, document.formName.fieldName,'You must enter a value for Field Name. Isn\\'t it?')");
_formControl.setVoidCallable();
replay();
1.8 +4 -2 jakarta-tapestry/framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java
Index: TestNumberTranslator.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- TestNumberTranslator.java 5 Aug 2005 04:54:49 -0000 1.7
+++ TestNumberTranslator.java 8 Aug 2005 17:23:14 -0000 1.8
@@ -218,7 +218,9 @@
{
NumberTranslator translator = new NumberTranslator();
- translator.setMessage("You entered a bunk value for {0}. I should look like {1}.");
+ // MessageFormat requires that single quotes be doubled if they are to be interpreted.
+
+ translator.setMessage("You entered a bunk value for {0}. I should look like {1}. Watch out for ''this''!");
addScript("/org/apache/tapestry/form/translator/NumberTranslator.js");
@@ -240,7 +242,7 @@
_component.getName();
_componentControl.setReturnValue("fieldName");
- _form.addEventHandler(FormEventType.SUBMIT, "validate_number(event, document.formName.fieldName,'You entered a bunk value for Field Label. I should look like #.')");
+ _form.addEventHandler(FormEventType.SUBMIT, "validate_number(event, document.formName.fieldName,'You entered a bunk value for Field Label. I should look like #. Watch out for \\'this\\'!')");
_formControl.setVoidCallable();
replay();
1.7 +5 -0 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java
Index: NumberTranslator.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- NumberTranslator.java 18 Jun 2005 12:54:39 -0000 1.6
+++ NumberTranslator.java 8 Aug 2005 17:23:14 -0000 1.7
@@ -19,6 +19,7 @@
import java.text.Format;
import java.util.Locale;
+import org.apache.hivemind.util.StringUtils;
import org.apache.tapestry.IForm;
import org.apache.tapestry.IMarkupWriter;
import org.apache.tapestry.IRequestCycle;
@@ -106,6 +107,10 @@
String message = buildMessage(field, getMessageKey());
IForm form = field.getForm();
+ // Escape backslashes and single quotes in the message
+ message = StringUtils.replace(message, "\\", "\\\\");
+ message = StringUtils.replace(message, "'", "\\'");
+
addSubmitHandler(form, "validate_number(event, document." + form.getName() + "."
+ field.getName() + ",'" + message + "')");
}
1.5 +9 -2 jakarta-tapestry/framework/src/java/org/apache/tapestry/form/RequirableFieldSupportImpl.java
Index: RequirableFieldSupportImpl.java
===================================================================
RCS file: /home/cvs/jakarta-tapestry/framework/src/java/org/apache/tapestry/form/RequirableFieldSupportImpl.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- RequirableFieldSupportImpl.java 21 Jul 2005 13:17:55 -0000 1.4
+++ RequirableFieldSupportImpl.java 8 Aug 2005 17:23:14 -0000 1.5
@@ -17,6 +17,7 @@
import java.text.MessageFormat;
import org.apache.hivemind.HiveMind;
+import org.apache.hivemind.util.StringUtils;
import org.apache.tapestry.IForm;
import org.apache.tapestry.IMarkupWriter;
import org.apache.tapestry.IRequestCycle;
@@ -47,8 +48,14 @@
if (form.isClientValidationEnabled())
{
- String function = "require(event, document." + form.getName() + "."
- + component.getName() + ",'" + buildRequiredMessage(component) + "')";
+ String requiredMessage = buildRequiredMessage(component);
+
+ // Escape backslashes and single quotes in the message
+ requiredMessage = StringUtils.replace(requiredMessage, "\\", "\\\\");
+ requiredMessage = StringUtils.replace(requiredMessage, "'", "\\'");
+
+ String function = "require(event, document." + form.getName() + "."
+ + component.getName() + ",'" + requiredMessage + "')";
form.addEventHandler(FormEventType.SUBMIT, function);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org