Uploaded image for project: 'Tapestry'
  1. Tapestry
  2. TAPESTRY-2139

Using ValidField and Validator triggers null point exception

    Details

    • Type: Bug
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 4.1
    • Fix Version/s: None
    • Component/s: Framework
    • Labels:
      None
    • Environment:
      Macos X, java 1.4

      Description

      Hello,

      There is a small bug:

      Description:

      Using deprecated component ValidField, a validation bean (IValidator), and enable javascript for this validator, then there is a null pointer exception.

      java.lang.NullPointerException
      Stack Trace:
      org.apache.tapestry.valid.BaseValidator.processValidatorScript(BaseValidator.java:292)
      org.apache.tapestry.valid.StringValidator.renderValidatorContribution(StringValidator.java:109)

      Test-Case:

      -html-

      <form jwcid="@Form" delegate="bean:delegate" clientValidationEnabled="ognl:true">
      <input jwcid="@ValidField" type="text" value="ognl:count" validator="bean:requiredString" displayName="testField"/>
      <input type="submit" value="Enregistrer"/>
      </form>

      -spec-

      <bean name="requiredString" class="org.apache.tapestry.valid.StringValidator,required,minimumLength=10,clientScriptingEnabled">
      </bean>

      -java-

      public String getMyName()

      { System.out.println("get my name " ); return "Numa"; }

      public abstract int getCount();
      public abstract void setCount(int count);

      Tested Solution:

      Add the following lines to ValidField.java on line 90 in the method renderComponent

      //Add on 4.1, SetScriptSource was added in 4.1 but is never called, so _scriptSource was never initialized
      validator.setScriptSource(cycle.getInfrastructure().getScriptSource());

      //In case ClientValidationEnabled is set to the form set it also to the Validator
      if (getForm().isClientValidationEnabled() && validator instanceof BaseValidator)
      ((BaseValidator)validator).setClientScriptingEnabled(true);

      I know the component is deprecated, but still in my case I want to migrate from 4.0 to 4.1 and I have more then 50 pages using forms with ValidField, I don't to change all of them, but I would like to take
      the advantage of 4.1 for other pages...

      Regards,

      Numa

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              numito Numa Schmeder
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated: