jsr344-experts@javaserverfaces-spec-public.java.net

[jsr344-experts] Re: Clear Input Values

From: Alexander Smirnov <alsmirnnov_at_gmail.com>
Date: Fri, 10 Jun 2011 15:49:51 -0700

This case solved pretty easy with "immediate" reset button, that
clears bean values before validation phase.
I don't think that we should have more ways to get the same goal.

On Thu, Jun 2, 2011 at 11:34 AM, Cagatay Civici
<cagatay.civici_at_gmail.com> wrote:
> 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(). 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
> 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
>



-- 
_________________
entia non sunt multiplicanda praeter necessitatem,
(entities should not be multiplied beyond necessity.)