Sounds like a good idea. 

But shouldn't that be handled via the JSF EG?
Such a behaviour would need to be written in the spec to be reliable, isn't?

LieGrue,
strub

--- On Mon, 5/30/11, Cagatay Civici <cagatay.civ...@gmail.com> wrote:

> From: Cagatay Civici <cagatay.civ...@gmail.com>
> Subject: Clear Input Values
> To: "MyFaces Development" <dev@myfaces.apache.org>
> Date: Monday, May 30, 2011, 8:12 AM
> Hi all,
> 
> 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().
> 
> Cagatay

Reply via email to