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