You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by Cagatay Civici <ca...@gmail.com> on 2011/06/01 11:44:56 UTC

Re: Clear Input Values

> 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?
Yes, I agree, it shouldn't be left to implementations.

> javax.faces.component.EditableValueHolder.resetValue()  and/or listener
> like
> http://myfaces.apache.org/trinidad/trinidad-api/tagdoc/tr_resetActionListener.html does not solve it?
As I've mentioned, sure there are solutions but no easy one.

> I totally agree with you that this stuff should be easier to use than
> it is now! I am describing some ideas to solve this problem in the
> blog post (e.g. resetValue() on FacesContext or a
> resetOnModelValueUpdate attribute), but maybe there are better ones...
> 
> Does primefaces provide something to solve this problem in some sort
> of way like trinidad does with the action listener Martin mentioned?
PrimeFaces doesn't have a solution for this now as I'd like this to be solved in JSF Spec/Impl, however it seems I need to place some workaround for p:input* and p:select* for this.

I'll take this to the EG.

Thanks for all the feedback!

Cagatay

On May 30, 2011, at 3:19 PM, Mark Struberg wrote:

> 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 <ca...@gmail.com> wrote:
> 
>> From: Cagatay Civici <ca...@gmail.com>
>> Subject: Clear Input Values
>> To: "MyFaces Development" <de...@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

Çağatay Çivici
Principal Consultant
PrimeFaces Lead | JSF EG Member

Prime Teknoloji
Bilkent Cyberpark, A-303d
06800 Ankara/Turkey
Tel: +90 312 265 05 07
http://www.prime.com.tr