That would make sense.

-Filip

Geoff Callender skrev:
I was wondering about that. Should the doco say the following instead, moving the business method into onValidate()?

    void onValidate()
    {
        if (!_authenticator.isValid(_userName, _password))
        {
_form.recordError(_passwordField, "Invalid user name or password.");
        }
    }

    String onSuccess()
    {
        return "PostLogin";
    }

On 10/12/2007, at 10:14 PM, Filip S. Adamsen wrote:

Hi,

That example is, as far as I can tell, outdated. Doesn't mean this isn't a bug, though.

Why can't you just do your validation in onValidate? If it's a question of outdated documentation, consider providing a documentation patch.

I'm planning to contribute some patches as soon as I've gotten a bit more used to IntelliJ IDEA, as I just converted from Eclipse and need to get used to it. Loving it so far, by the way.

-Filip

Geoff Callender skrev:
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

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to