Hi,

Is this a bug? I couldn't find it in JIRA. The user loses the changes they typed into an "input" or "edit" page if an error is recorded by onSuccess() AND the page is dealing with a client persisted object. The page is redisplayed OK, with error, but with the previous values!!!

The user's changes aren't lost if
(a) I move the work that finds the error from onSuccess() into onValidate(); or
(b) I add a simple client-persisted field to the page; or
(c) I replace client persistence with session persistence.

To illustrate the problem, it's just like the example from http://tapestry.apache.org/tapestry5/tapestry-core/guide/validation.html , which contains these excerpts:

    @Persist
    private String _userName;

    private String _password;

    String onSuccess()
    {
        if (!_authenticator.isValid(_userName, _password))
        {
_form.recordError(_passwordField, "Invalid user name or password.");
            return null;
        }

        return "PostLogin";
    }

except that instead of a single field, _userName, I am persisting a whole object, _user:

        @Persist("client")
        private User _user;

and in the template we refer to its fields, eg:

                <input t:type="TextField" t:id="firstName" 
value="user.firstName" ...

If the user types a value into firstName, but the onSuccess() method records an error, then the user loses what they typed.

However, if I add another field to the page then everything works!

                        @Persist("client")
        private String _aField;

                <input t:type="TextField" t:id="aField" value="aField" ...

Alternatively, it works if I do either of the other 2 things - use session persistence or move all logic into onValidate().

Anyone else seen this?

Thanks,

Geoff

Reply via email to