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