That looks very reasonable. I think I will adopt this approach. Thanks Geoff.
Benny On Wed, Sep 2, 2009 at 1:02 AM, Geoff Callender < geoff.callender.jumpst...@gmail.com> wrote: > Yes, let's hope the doco is updated soon! > > https://issues.apache.org/jira/browse/TAP5-812 > > As for your conundrum, is there a reason you're not happy to do the > following? It's only a few lines and its intention seems very clear. > > @Component(id = "searchForm") > private Form _form; > > void onValidateForm() { > if (_form.getHasErrors()) { > return; > } > ... > > Geoff > http://jumpstart.doublenegative.com.au:8080/jumpstart/ > > > On 02/09/2009, at 12:20 PM, Benny Law wrote: > > Thanks for alerting me, Geoff. But even the input validation example in >> the >> User Guide shows recording error in onSuccess()! I must say I'm a bit >> alarmed by these "quirks". I hope I don't find too many more surprises >> when >> I get deeper into Tapestry 5.1. I am working on a critical application >> under >> a tight deadline, and I am counting on Tapestry to help me deliver. I used >> Tapestry 3 before and loved it, but 5 is a totally new framework. >> >> Benny >> >> On Tue, Sep 1, 2009 at 9:46 PM, Geoff Callender < >> geoff.callender.jumpst...@gmail.com> wrote: >> >> Beware, there's a long-standing problem with recording errors in >>> onSuccess(). >>> >>> https://issues.apache.org/jira/browse/TAPESTRY-1972 >>> >>> Geoff >>> >>> >>> On 02/09/2009, at 7:59 AM, Benny Law wrote: >>> >>> Thanks Sebastian. I agree that only business logic related validation >>> >>>> should >>>> go into onSuccess, and I would leave basic field validations to >>>> validators >>>> as much as possible. My problem with onValidateForm is still the amount >>>> of >>>> code I need to write to check for existing errors before I can do cross >>>> field validation. Let me give a quick example: >>>> >>>> Suppose I have two date fields, Start Date and End Date. I would use the >>>> built-in validators to check for missing values and invalid dates. >>>> However, >>>> in order to cross-validate these dates (to ensure Start Date is not >>>> later >>>> than End Date) in onValidateForm, I would need to inject the two fields, >>>> get >>>> the tracker from the form, and call inError() to find out if any of the >>>> dates are invalid (missing or bad syntax). If there are no errors, then >>>> I >>>> can compare the date properties bound to the fields. Do you see what I >>>> am >>>> getting at? >>>> >>>> Doing this in onSuccess is a lot easier since I won't need to check for >>>> existing errors, and I know that the date properties bound to the fields >>>> have been updated. Ideally, I would love to have another version of >>>> ValidateForm event which is fired before Success and only if there are >>>> no >>>> errors. >>>> >>>> Benny >>>> >>>> On Tue, Sep 1, 2009 at 3:39 PM, Sebastian Hennebrueder >>>> <use...@laliluna.de>wrote: >>>> >>>> Hello, >>>> >>>>> >>>>> the intended validation method for cross field validation is >>>>> onValidateForm >>>>> The onSuccess is probable the latest point to do validation. I would >>>>> only >>>>> place business logic related validation in there >>>>> >>>>> You may do field validation in the onValidateForm as well but it is >>>>> normally simpler, faster and cleaner to do this using annotations. >>>>> >>>>> If you want to do field validation in the onValidateForm I would not >>>>> follow >>>>> the approach of newtonic and write if then statements >>>>> but to create a simple builder (see Effective Java). >>>>> Sample without reflection inside of the builder >>>>> Validator userVal = >>>>> ValidatorBuilder.required().minLenth(3).maxLength(60).build(); >>>>> >>>>> usage in onValidateForm >>>>> userVal.validate(user.getName); >>>>> >>>>> You could leverage this using reflection >>>>> >>>>> >>>>> -- >>>>> Best Regards / Viele Grüße >>>>> >>>>> Sebastian Hennebrueder >>>>> ----- >>>>> Software Developer and Trainer for Hibernate / Java Persistence >>>>> http://www.laliluna.de >>>>> >>>>> Benny Law schrieb: >>>>> >>>>> Hi Onno, >>>>> >>>>> >>>>>> I am all for clean and maintainable code, and that's why I think >>>>>> ValidateForm can be cleaner if I didn't need to check for field errors >>>>>> first. >>>>>> >>>>>> On the main Tapestry 5.1 page, the Login example calls the >>>>>> authenticator >>>>>> in >>>>>> onValidateForm, but the same example in the User Guide under Input >>>>>> Validation does that in onSuccess. I think the latter is correct; the >>>>>> former >>>>>> won't work properly because it acts on the properties bound to the >>>>>> fields >>>>>> which may not reflect the current field contents if there are field >>>>>> validation errors. To fix the first example, some code needs to be >>>>>> added >>>>>> to >>>>>> onValidateForm to check if the fields have passed field-level >>>>>> validations >>>>>> before invoking the authenticator. >>>>>> >>>>>> I hope this clarifies what I am thinking. Thanks. >>>>>> >>>>>> Benny >>>>>> >>>>>> On Mon, Aug 31, 2009 at 4:57 AM, Onno Scheffers <o...@piraya.nl> >>>>>> wrote: >>>>>> >>>>>> Thanks for your response. Could you explain what you mean by keeping >>>>>> my >>>>>> >>>>>> validation "in the correct callback"? >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> I think it's about writing clean and maintainable code. >>>>>>> For other developers reading back your code it makes more sense if >>>>>>> you >>>>>>> add >>>>>>> your validation errors in the ValidateForm event and to perform some >>>>>>> (database?) action in the success handler. >>>>>>> >>>>>>> The ValidateForm event is where validation errors are added and some >>>>>>> of >>>>>>> them >>>>>>> are automatically taken care of for you by the Tapestry validator >>>>>>> mechanism. >>>>>>> If you don't want to add more than one error-message, you can easily >>>>>>> check >>>>>>> if the field is in error already. >>>>>>> Sometimes it also makes sense to add mutiple errors per field since >>>>>>> you're >>>>>>> telling the user immediately what (s)he's doing wrong instead of >>>>>>> having >>>>>>> them >>>>>>> re-submit again only to find yet another validation error on the same >>>>>>> field. >>>>>>> >>>>>>> >>>>>>> regards, >>>>>>> >>>>>>> Onno >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>>> >>>>> >>>>> >>>>> >>> >