Hi all,
I'm trying to write simple registration form using beaneditor component.
If I fullfill all reqired fields in the form and submit it - everything
works fine, but if server validation occurs (for example passwords don't
match), then all data is lost and Registration page renders with validation
errors, but without user data (input values).
I think the reason for this behaviour is the initializeNewUser() method,
wich rewrites all data if user field is null. But if I delete this method
from code, tapestry throws exception - User can't be instantiated (tapestry
tries to use constructor with most parameters, which has custom objects, not
only String, Integer, etc). So how can resolve this problem?
Thanks in advance.

 My code (some code is token from Tapestry5 Hotel Booking example):
-----------------Registration.java:--------------------------------------------

public class Registration {

    @Property
    @Persist(PersistenceConstants.FLASH)
    private User user;

    @OnEvent(value = EventConstants.PREPARE, component = "registerForm")
    private void initializeNewUser() {
        if (this.user == null) {
            this.user = new User();
            this.user.setCustomer(new Customer());
        } else {
            if (this.user.getCustomer() == null) {
                this.user.setCustomer(new Customer());
            }
        }
    }


    @Property
    private String verifyPassword;

    @Inject
    private UserService userService;

    @Component
    private Form registerForm;

    @Inject
    private Messages messages;

    public Object onSubmitFromRegisterForm() {

        if (!verifyPassword.equals(user.getPassword())) {
            registerForm.recordError(messages.get("error.verify.password"));

            return null;
        }

        if (userService.getUserByLogin(user.getLogin()) != null) {

registerForm.recordError(messages.get("error.user.already.exists"));

            return null;
        }

        userService.save(user);

        return Index.class;

    }
}


--------------Registration.tml------------------------------------


<html t:type="layout" title="Customer registration"
      t:sidebarTitle="Current Time"
      t:pageTitle="Register"
      xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";
      xmlns:p="tapestry:parameter">

<fieldset id="register">
    <form class="full-form" t:id="registerForm">
        <t:errors/>

                <fieldset>
                    <legend>Customer registration(company or private
person)</legend>

                    <t:beaneditor object="user.customer"
exclude="literal:id,users">
                        <p:businessName>
                            <t:label for="businessName"/>
                            <t:textfield t:id="businessName"
value="user.customer.businessName" validate="required"/>
                        </p:businessName>
                        <p:contactPhone>
                            <t:label for="customer_contactPhone"/>
                            <t:textfield t:id="customer_contactPhone"
value="user.customer.contactPhone" validate="required"/>
                        </p:contactPhone>
                        <p:contactPerson>
                            <t:label for="contactPerson"/>
                            <t:textfield t:id="contactPerson"
value="user.customer.contactPerson" validate="required"/>
                        </p:contactPerson>
                        <p:businessAddress>
                            <t:label for="businessAddress"/>
                            <t:textfield t:id="businessAddress"
value="user.customer.businessAddress" validate="required"/>
                        </p:businessAddress>
                        <p:email>
                            <t:label for="customer_email"/>
                            <t:textfield t:id="customer_email"
value="user.customer.email" validate="required,email"/>
                        </p:email>
                    </t:beaneditor>
                </fieldset>

        <fieldset>
                <legend>Personal registration</legend>
        <t:beaneditor object="user" exclude="literal:id,roles"
add="verifyPassword">


                <p:firstName>
                    <t:label for="firstName"/>
                    <t:textfield t:id="firstName" value="user.firstName"
validate="required"/>
                </p:firstName>


                <p:middleName>
                    <t:label for="middleName"/>
                    <t:textfield t:id="middleName" value="user.middleName"
validate="required"/>
                </p:middleName>


                <p:lastName>
                    <t:label for="lastName"/>
                    <t:textfield t:id="lastName" value="user.lastName"
validate="required"/>
                </p:lastName>


                <p:contactPhone>
                    <t:label for="contactPhone"/>
                    <t:textfield t:id="contactPhone"
value="user.contactPhone" validate="required"/>
                </p:contactPhone>


                <p:mobilePhone>
                    <t:label for="mobilePhone"/>
                    <t:textfield t:id="mobilePhone" value="user.mobilePhone"
validate="required"/>
                </p:mobilePhone>


                <p:address>
                    <t:label for="address"/>
                    <t:textfield t:id="address" value="user.address"
validate="required"/>
                </p:address>


                <p:email>
                    <t:label for="email"/>
                    <t:textfield t:id="email" value="user.email"
validate="required"/>
                </p:email>


                <p:nickname>
                    <t:label for="nickname"/>
                    <t:textfield t:id="nickname" value="user.nickname"
validate="required"/>
                </p:nickname>


                <p:login>
                    <t:label for="login"/>
                    <t:textfield t:id="login" value="user.login"
validate="required"/>
                </p:login>


                <p:password>
                    <t:label for="password"/>
                    <t:passwordfield t:id="password" value="user.password"
validate="required"/>
                </p:password>

                <p:verifyPassword>
                    <t:label for="verifyPassword"/>
                    <t:passwordfield t:id="verifyPassword"
value="verifyPassword" validate="required"/>
                </p:verifyPassword>

        </t:beaneditor>

        </fieldset>

        <div class="form-submit">
            <input type="submit" value="Register"/>
        </div>
        <div class="member">Already member?
            <t:pagelink page="Login">Login now!</t:pagelink>
        </div>
    </form>
</fieldset>
</html>

Reply via email to