Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 1.1, 1.2, 2.0, 2.1, 2.0 Rev a, 2.1 Rev a
    • Fix Version/s: 2.2 Sprint 14
    • Component/s: Lifecycle
    • Labels:
      None

      Description

      I'd like to discuss something I've been thinking about lately. How to clear forms easily when validation fails?

      Consider this simple case;

      <h:form>

      <h:messages />

      <h:inputText value="#

      {pprBean.firstname}" required="true"/>
      <h:inputText value="#{pprBean.surname}" required="true"/>

      <h:commandButton value="Save">
      <f:ajax render="@form" execute="@form"/>
      </h:commandButton>

      <h:commandButton value="Reset" actionListener="#{pprBean.reset}">
      <f:ajax render="@form" execute="@this"/>
      </h:commandButton>

      <h:outputText value="#{pprBean.firstname}

      " id="display" />

      </h:form>

      Bean;

      private String firstname, surname;

      public void reset()

      { firstname = null; surname = null; }

      So when you run this, if one of the field is empty and the other is not, validations fails and message is displayed. Problem happens when reset button is clicked to reset the form values. At processValidations phase UIInput saves the converted value at state
      and since validation failed, update model is not executed so local value is never cleared. Clicking reset, clears the bean's values but inputText will not use the bound value and use the one kept in state as well ending up a confusing behavior. I've seen this in many forums.

      I know wiki's like this;

      http://wiki.apache.org/myfaces/ClearInputComponents

      But I mean shouldn't this work as expected? Proposed solutions seem way too hard just to clear form values. (component binding and calling resetValue(), new view, javascript etc.)

      If at processValidations phase, local value is not stored in state, I think that will make the code above work, but I'm not sure if there will be any side effects. Does anyone know why converted local value is kept at state by calling setValue(). Both mojarra and myfaces keeps the value at state and I cannot find anything regarding this in spec, please point me if I'm wrong.

      Regards.

      Çağatay Çivici

        Issue Links

          Activity

          Hide
          Ed Burns added a comment -

          When sitting down to implement this, I discovered at least one additional aspect that must be specified. AjaxBehavior must have a boolean "resetInput" property.

          Show
          Ed Burns added a comment - When sitting down to implement this, I discovered at least one additional aspect that must be specified. AjaxBehavior must have a boolean "resetInput" property.
          Hide
          Ed Burns added a comment -

          Need verification from Cagatay.

          Show
          Ed Burns added a comment - Need verification from Cagatay.
          Hide
          Manfred Riem added a comment -

          Closing resolved issue out

          Show
          Manfred Riem added a comment - Closing resolved issue out

            People

            • Assignee:
              Ed Burns
              Reporter:
              Ed Burns
            • Votes:
              1 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Time Tracking

                Estimated:
                Original Estimate - 1 day, 6 hours
                1d 6h
                Remaining:
                Time Spent - 6 hours, 43 minutes Remaining Estimate - 23 hours, 17 minutes
                23h 17m
                Logged:
                Time Spent - 6 hours, 43 minutes Remaining Estimate - 23 hours, 17 minutes
                6h 43m