I don't think you want to use flash persistence for this.  Try just
using @Persist. It looks like you are creating a new user every time
the page renders.

Mark

On Sat, Oct 23, 2010 at 3:08 PM, Jim O'Callaghan <jc1000...@yahoo.co.uk> wrote:
> I'm not sure if this is relevant to your current problem, but to tell
> Tapestry which constructor to use for the bean editor, you should annotate
> the default (no args) constructor with @Inject - this will allow the BEF to
> create the relevant entity if none if present.  Hope this helps.
>
> Regards,
> Jim.
>
> -----Original Message-----
> From: Anton Mezerny [mailto:anton.meze...@gmail.com]
> Sent: 23 October 2010 17:02
> To: Tapestry users
> Subject: Objects session persistance and validation
>
> 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>
>
>
> ---------------------------------------------------------------------
> 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

Reply via email to