Hi On form submission, onSubmit is called after both onSuccess and onFailure. You should use onFailure to handle a failure and onSuccess to handle success. In case there is a common logic in both cases to be executed at the end, only in that case, you should use onSubmit.
regards Taha On Jun 28, 2012, at 3:01 PM, Pham Hoang Tien wrote: > Hi every one, > > I am learning Tapestry5(tapestry core 5.1.0.5), I meet an issue make me > confused. At chapter 6 "User Input Validation", in "Cross-Form Validation" > part have a statement that "If some errors were recorded into the form, > Tapestry will always redisplay the same page, so we don't need to bother > about any navigation issues". when I run the application, I make and > recorded one error into my form in onValidate() event handler. I think it > will be redisplayed, but it go straight to another page from > onSubmitFromRegistrationForm() event handler. Here is my page class: > > package com.formos.example.pages; > > import java.util.Date; > > import org.apache.tapestry5.EventConstants; > import org.apache.tapestry5.SelectModel; > import org.apache.tapestry5.annotations.ApplicationState; > import org.apache.tapestry5.annotations.Component; > import org.apache.tapestry5.annotations.OnEvent; > import org.apache.tapestry5.annotations.Persist; > import org.apache.tapestry5.corelib.components.Form; > import org.apache.tapestry5.corelib.components.PasswordField; > import org.apache.tapestry5.ioc.Messages; > import org.apache.tapestry5.ioc.annotations.Inject; > import org.apache.tapestry5.util.EnumSelectModel; > > import com.formos.example.utils.User; > import com.formos.example.utils.celebrities.model.Country; > import com.formos.example.utils.celebrities.model.Gender; > > public class Registration { > @ApplicationState > private User user; > > @Persist > private String userName; > > @Persist > private String password; > private String password2; > > @Persist > private Gender gender; > > @Persist > private boolean subscribe; > private String email; > > private boolean unsubscribe; > > @Component(id="registrationForm") > private Form registrationForm; > > @Component(id="password") > private PasswordField passwordField; > > @Inject > private Messages messages; > > public boolean isUnsubscribe() { > return unsubscribe; > } > > public void setUnsubscribe(boolean unsubscribe) { > this.unsubscribe = unsubscribe; > } > > void onSelectedFromSubmitButton() { > System.out.println("The Submit button was pressed!"); > User newUser = new User("John", "Johnson"); > this.user = newUser; > nextPage = ShowAll.class; > } > > private Class nextPage; > Object onSubmitFromRegistrationForm() { > System.out.println("The form was submitted!"); > if (unsubscribe) subscribe = false; > return nextPage; > } > > void onValidate() { > System.out.println("In onValidate."); > if (password != null && !password.equals(password2)) { > password = null; > registrationForm.recordError(passwordField, > messages.get("passwords-dont-match")); > } > } > > void onSuccess() { > System.out.println("In onSuccess."); > } > > void onFailure() { > System.out.println("In onFailure."); > } > > @OnEvent(component = "resetButton", value = EventConstants.SELECTED) > void onResetButtonAS() { > userName = null; > password = null; > email = null; > gender = null; > subscribe = false; > System.out.println("The Reset button was pressed!"); > } > > public boolean isSubscribe() { > return subscribe; > } > > public void setSubscribe(boolean subscribe) { > System.out.println("Setting subscribe: " + subscribe); > this.subscribe = subscribe; > } > > public String getEmail() { > return email; > } > > public void setEmail(String email) { > this.email = email; > } > > public String getUserName() { > return userName; > } > > public void setUserName(String userName) { > System.out.println("Setting user name: " + userName); > this.userName = userName; > } > > public String getPassword() { > return password; > } > > public void setPassword(String password) { > System.out.println("Setting password: " + password); > this.password = password; > } > > public String getPassword2() { > return password2; > } > > public void setPassword2(String password2) { > this.password2 = password2; > } > > public Gender getGender() { > return gender; > } > > public void setGender(Gender gender) { > System.out.println("Setting gender: " + gender); > this.gender = gender; > } > > public Gender getMale() { > return Gender.MALE; > } > > public Gender getFemale() { > return Gender.FEMALE; > } > > public boolean isPasswordNotSubmitted() { > //return userName == null; > return true; > } > > public SelectModel getCountries() { > return new EnumSelectModel(Country.class, messages); > } > > @Persist > private Country country; > > public Country getCountry() { > return country; > } > > public void setCountry(Country country) { > this.country = country; > } > > @Persist > private Date dateOfBirth; > > public Date getDateOfBirth() { > return dateOfBirth; > } > > public void setDateOfBirth(Date dateOfBirth) { > this.dateOfBirth = dateOfBirth; > } > > @Persist > private int age; > > public int getAge() { > return age; > } > > public void setAge(int age) { > this.age = age; > } > } > > and here is my page template: > > <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> > <head> > <title>Celebrity Collector: Registration</title> > </head> > <body> > > Registration > > <t:form t:id="registrationForm"> > <t:errors/> > <table> > <tr> > <td><t:label t:for="userName">Label for > user name</t:label>:</td> > <td> > <input type="text" > t:type="textfield" t:id="userName" > t:value="userName" > > t:validate="required,minlength=3,maxlength=8" /> > </td> > </tr> > <t:if t:test="passwordNotSubmitted"> > <tr> > <td><t:label > t:for="password">Label for password</t:label>:</td> > <td> > <input type="text" > t:type="passwordfield" t:id="password" > t:value="password" > > t:validate="required,minlength=3,maxlength=8" /> > </td> > </tr> > <tr> > <td><t:label > t:for="password2">Label for password 2</t:label>:</td> > <td><input type="text" > t:type="passwordfield" t:id="password2" > t:label="Repeat password" t:value="password2" /></td> > </tr> > </t:if> > <tr> > <td>Gender:</td> > <td> > <t:radiogroup t:value="gender"> > <input type="radio" > t:type="radio" t:value="male"/>Male > <input type="radio" > t:type="radio" t:value="female"/>Female > </t:radiogroup> > </td> > </tr> > <tr> > <td>Birth Date:</td> > <td><input type="text" > t:type="datefield" t:value="dateOfBirth" > t:format="EEE, MMM d, ''yy" /></td> > </tr> > <tr> > <td><t:label t:for="age" />:</td> > <td> > <input type="text" > t:type="textfield" t:id="age" > > t:validate="required,min=5,max=120" /> > </td> > </tr> > <tr> > <t:if t:test="subscribe"> > <td><t:label t:for="email" > /></td> > <td> > <input type="text" > t:type="textfield" t:id="email" t:value="email" > t:validate="regexp" /> > <input type="checkbox" > t:type="checkbox" t:value="unsubscribe" > > onclick="this.form.submit()" /> I don't want to subscribe > </td> > <t:parameter t:name="else"> > <td colspan="2"> > <input > type="checkbox" t:type="checkbox" > > t:value="subscribe" onclick="this.form.submit()" /> > Check > the box to subscribe to our Newsletter. > </td> > </t:parameter> > </t:if> > </tr> > <tr> > <td>Country:</td> > <td> > <select t:type="select" > t:model="countries" t:value="country" /> > > </td> > </tr> > </table> > <input type="submit" t:type="submit" > t:id="submitButton" value="Submit"/> > <input type="submit" t:type="submit" t:id="resetButton" > value="Reset"/> > </t:form> > <br /> > # Back to the Start Page > </body> > </html> > > Please help me to understand, thank every one. > > -- > View this message in context: > http://tapestry.1045711.n5.nabble.com/Tapestry-usage-questions-tp5714141.html > Sent from the Tapestry - User mailing list archive at Nabble.com. > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org