I've used the reset button to clear a form on many occasions. Some forms, in
a detail editor for instance, may have alot of data already filled and you
edit a few fields it, then decide you want to go back to the original and
start again. Reset gives you the original data back.

This is a client side action. <input type="reset" value="Reset">. It doesn't
happen on the server.




----- Original Message ----- 
From: "Aaron Bartell" <[EMAIL PROTECTED]>
To: "'MyFaces Discussion'" <users@myfaces.apache.org>
Sent: Wednesday, April 27, 2005 3:07 PM
Subject: RE: resetting a form


I was actually thinking the opposite.  As long as I can remember back I have
never used a form reset button (not even when I was doing my web programming
with RPG CGI or PHP).  I guess I would look at the scenario for why the user
would ever want to clear a form.  Is it because they want to cancel the
current process they are going through, then give them a cancel button. Is
it because they want to start completely over on the page? - I have never
needed to do this in my life as a web page consumer.  I might change a
couple values in some fields but I never use the form reset button the web
pages always provide.  Just seems so meaningless (and dangerous because of
data loss by accident), but maybe that is just me.

Aaron Bartell
http://mowyourlawn.com

-----Original Message-----
From: Jon Travis [mailto:[EMAIL PROTECTED]
Sent: Wednesday, April 27, 2005 12:58 PM
To: MyFaces Discussion
Subject: Re: resetting a form

Isn't he talking about things which have inputs?  Clearing
the ID is just resetting a read-only parameter, which is
a little different than UIInput components.

What I've been using is a method which recurses through a tree,
checking if components are UIInputs.  If they are, it
just does component.setValue(null), and
component.setSubmittedValue(null).

It seems like this would be a _very_ common thing for people
to want to do, but I'm surprised I haven't found it or
something similar in any documentation I have (including
Kito's book)

-- Jon


On Apr 27, 2005, at 2:48 AM, CsÃk Norbert wrote:

> Check out my clear button. In faces-config I have a navigation rule
> for the "clear" outcome: from page.jspx to page.jspx. It works for me.
>
>
> public class PageBean  {
> private String id;
> private String name;
>
> public PageBean() {
> }
>
> public String save() {
> FacesContext.getCurrentInstance().addMessage(null, new
> FacesMessage("Saved."));
>
> id = "15";
>
> return "success";
> }
>
> public String delete() {
> FacesContext.getCurrentInstance().addMessage(null, new
> FacesMessage("Deleted."));
>
> return clear();
> }
>
> public String clear() {
> id = "";
>
> return "clear";
> }
>
> public String editDetail() {
> FacesContext.getCurrentInstance().addMessage(null, new
> FacesMessage("Detail."));
>
> return "success";
> }
>
> public boolean isLoaded() {
> return getId() != null && !getId().equals("");
> }
>
> public String getId() {
> return (id == null)
> ?
> (String)FacesContext.getCurrentInstance().getExternalContext().getReque
> stParameterMap().get("form:id")
> : id
> ;
> }
>
> public void setId(String id) {
> this.id = id;
> }
>
> public String getName() {
> return name;
> }
>
> public void setName(String name) {
> this.name = name;
> }
> }
>
> And the JSF page:
>
> <?xml version='1.0' encoding='ISO-8859-2'?>
> <jsp:root xmlns="http://www.w3.org/1999/xhtml";
>           xmlns:jsp="http://java.sun.com/JSP/Page"; version="2.0"
>           xmlns:f="http://java.sun.com/jsf/core";
>           xmlns:h="http://java.sun.com/jsf/html";>
>   <f:view>
>     <html>
>       <jsp:output omit-xml-declaration="false"
> doctype-root-element="html"
>
> doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";
>                   doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"/>
>       <jsp:directive.page contentType="text/html;charset=ISO-8859-2"/>
>       <head>
>         <meta http-equiv="Content-Type"
>               content="text/html; charset=ISO-8859-2"/>
>         <title>
>           Page
>         </title>
>       </head>
>       <body>
>         <h:form id="form">
>           <h:panelGrid columns="1">
>             <h:messages layout="table"/>
>             <h:panelGroup>
>               <h:commandButton value="New" action="#{PageBean.clear}"
> immediate="true"/>
>               <h:commandButton value="Save" action="#{PageBean.save}"/>
>               <h:commandButton value="Delete"
> action="#{PageBean.delete}"
>                                immediate="true"
> rendered="#{PageBean.loaded}"/>
>             </h:panelGroup>
>
> <h:inputHidden id="id" value="#{PageBean.id}"/>
>
> <h:panelGrid columns="2">
> <h:outputLabel style="color:red" value="NÃv"/>
> <h:inputText value="#{PageBean.name}" required="true"/>
> <h:outputLabel value="ID"/>
> <h:outputText value="#{PageBean.id}"/>
> <h:outputLabel value="TÃpus"/>
> <h:commandButton action="#{PageBean.editDetail}" value="Szerkeszt"
> disabled="#{!PageBean.loaded}"/>
> </h:panelGrid>
>
>           </h:panelGrid>
>         </h:form>
>       </body>
>     </html>
>   </f:view>
> </jsp:root>
>
>
>
> On 4/26/05, Vincent SEVEL <[EMAIL PROTECTED]> wrote:
>>
>>
>>
>> Hi, I am trying to figure out the best/simplest way to reset a form
>> whose
>> fields are associated with a backing bean. I have found one incomplete
>> solution and would like to hear from other people.
>>
>>
>>
>> I have got a person.jsp, which contains:
>>
>> Ã       Input text bound to #{person.lastname}, required=true
>>
>> Ã       Input text bound to #{person.firstname}
>>
>> Ã       Button bound to #{personPage.console} that displays the
>> content of
>> the form in the console
>>
>> Ã       Button bound to #{personPage.reset} that blanks out all the
>> fields
>> from the form
>>
>>
>>
>> 1) Initially I just removed the "person" object from the request map
>> and
>> returned null from the reset action. This caused the form to be
>> reset, but
>> also an validation error message to be displayed on the next page
>> about the
>> first field not being filled (ie: it is required).
>>
>>
>>
>> 2) Then, I set immediate='true' on the reset button, and rendered the
>> response directly from the reset action (ie:
>> FacesContext.getCurrentInstance().renderResponse()). Although this
>> skipped
>> the validation phase, it did not repopulate the components from the
>> value
>> binding expressions (ie: it does not blank out the form).
>>
>>
>>
>> 3) The only and last solution I can see at this time would be to
>> findComponent() the lastname & firstname fields, blank them out
>> manually and
>> renderResponse() immediately. But this extremely tedious and error
>> prone.
>>
>>
>>
>> In short, I would like to deactivate validation and conversion for
>> some
>> special actions, but still feed from the backing bean during the
>> render
>> phase. Any ideas?
>>
>>
>>
>> Thanks, source follows.
>>
>> Vincent
>>
>>
>>
>> person.jsp
>>
>> <f:view>
>>
>>             <h:messages styleClass="error" layout="table"
>> showDetail="true"
>> showSummary="false" tooltip="true"/>
>>
>>             <h:form>
>>
>>                         Lastname: <h:inputText id="lastname"
>> value="#{person.lastname}" required="true"/><p/>
>>
>>                         Firstname: <h:inputText id="firstname"
>> value="#{person.firstname}"/><p/>
>>
>>                         <h:commandButton value="Console"
>> action="#{personPage.console}"/>
>>
>>                         <h:commandButton value="Reset"
>> immediate="true"
>> action="#{personPage.reset}"/>
>>
>>             </h:form>
>>
>> </f:view>
>>
>>
>>
>> public class Person {
>>
>>   private String lastname;
>>
>>   private String firstname;
>>
>> â
>>
>>
>>
>> public class PersonPage {
>>
>>
>>
>>   private Map getRequestMap() {
>>
>>     return
>> FacesContext.getCurrentInstance().getExternalContext().getRequestMap()
>> ;
>>
>>   }
>>
>>
>>
>>   public String console() {
>>
>>     Person person = (Person) getRequestMap().get("person");
>>
>>     System.out.println(person.getLastname()+"
>> "+person.getFirstname());
>>
>>     return null;
>>
>>   }
>>
>>
>>
>>
>>
>>   public String reset() {
>>
>>     getRequestMap().remove("person");
>>
>>     FacesContext.getCurrentInstance().renderResponse(); // will skip
>> the
>> validation and conversion phases, but will not refresh from the
>> backing bean
>>
>>     return null;
>>
>>   }
>>
>> }
>
>
> -- 
>  CsÃk Norbert          http://norbert.web.elte.hu/
>  ProgramtervezÅ matematikus
>  Trilobita Informatikai Rt. - rendszertervezÅ fejlesztÅmÃrnÃk
> ___ keep sm:)ing _________________________ooo__C( O O )L__ooo__
> http://www.aion.hu/ - A csik.NET otthona
> http://www.spreadfirefox.com/ - Rediscover the web
> LÃgy pontos: MÃrj mikro-millimÃterben! JelÃlj krÃtÃval! VÃgj baltÃval!


Reply via email to