tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Howard M. Lewis Ship (JIRA)" <...@tapestry.apache.org>
Subject [jira] Commented: (TAPESTRY-1972) Client persistence bug - user typing lost
Date Thu, 03 Jan 2008 20:04:34 GMT

    [ https://issues.apache.org/jira/browse/TAPESTRY-1972?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12555659#action_12555659

Howard M. Lewis Ship commented on TAPESTRY-1972:

I think this is related to TAPESTRY-1941.  It may be a duplicate.

> Client persistence bug - user typing lost
> -----------------------------------------
>                 Key: TAPESTRY-1972
>                 URL: https://issues.apache.org/jira/browse/TAPESTRY-1972
>             Project: Tapestry
>          Issue Type: Bug
>          Components: tapestry-core
>    Affects Versions: 5.0.6
>         Environment: Safari, OS X, JBoss 4.2.1
>            Reporter: Geoff Callender
> 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() - this fixes
all TextField components but does not fix Select, DateField, checkbox, or expansions; or
> (b) I add a simple client-persisted field to the page - remarkably this fixes; 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().

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org

View raw message