|
Hi,
A colleague of mine asked me why ValidationError doesn't work with Serializable as Component's #info, #error, #debug, ... methods. I looked deeper and I saw a solution: write a custom IValidationError which keeps the Serializable and use it later. Problem 1) IValidationError requires from me to deal with IErrorMessageSource In my case with our custom FeedbackPanel that knows how to render our custom Serializables this is not needed Workaround: just return empty string to keep FormComponent#error() quiet (otherwise it logs a warning if the returned message is null) Problem 2) With my custom IValidationError impl I have to override FormComponent#error() to be able to use it And here I start thinking that IErrorMessageSource is something that is related to org.apache.wicket.validation.ValidationError because it works with resource keys (message bundles). I think it would be better if IValidationError actually had a method that returns a Serializable. In this case the current code of FormComponent#error() will be in o.a.w.validation.ValidationError and it will return org.apache.wicket.markup.html.form.ValidationErrorFeedback. And my custom IValidationError will return my custom Serializable impl So the new body of FormComponent#error(IValidatable) will be: public void error(IValidationError error) { error(error.getMessage()); // getMessage() returns the Serializable } I doubt there are many custom impls of IErrorMessageSource in the wild. -- Martin Grigorov jWeekend Training, Consulting, Development http://jWeekend.com |
|
i dont quite follow all this, but if you just want to change
IValidationErrror#getErrorMessage() to return a Serializable instead of a String im fine with that. -igor On Wed, Mar 14, 2012 at 6:17 AM, Martin Grigorov <[hidden email]> wrote: > Hi, > > A colleague of mine asked me why ValidationError doesn't work with > Serializable as Component's #info, #error, #debug, ... methods. > I looked deeper and I saw a solution: write a custom IValidationError > which keeps the Serializable and use it later. > > Problem 1) IValidationError requires from me to deal with IErrorMessageSource > In my case with our custom FeedbackPanel that knows how to render our > custom Serializables this is not needed > Workaround: just return empty string to keep FormComponent#error() > quiet (otherwise it logs a warning if the returned message is null) > > Problem 2) With my custom IValidationError impl I have to override > FormComponent#error() to be able to use it > > And here I start thinking that IErrorMessageSource is something that > is related to org.apache.wicket.validation.ValidationError because it > works with resource keys (message bundles). > I think it would be better if IValidationError actually had a method > that returns a Serializable. In this case the current code of > FormComponent#error() will be in o.a.w.validation.ValidationError and > it will return org.apache.wicket.markup.html.form.ValidationErrorFeedback. > And my custom IValidationError will return my custom Serializable impl > > So the new body of FormComponent#error(IValidatable) will be: > > public void error(IValidationError error) > { > error(error.getMessage()); // getMessage() returns the Serializable > } > > I doubt there are many custom impls of IErrorMessageSource in the wild. > > -- > Martin Grigorov > jWeekend > Training, Consulting, Development > http://jWeekend.com |
|
You almost got it :-)
Returning Serializable instead of String is half of it. The other half is to replace error(new ValidationErrorFeedback(error, message)); with error(message); in FormComponent#error() The 'message' can bring the 'error' that produced it if it needs it. OK ? Wicket 6.0 only of course. On Wed, Mar 14, 2012 at 5:41 PM, Igor Vaynberg <[hidden email]> wrote: > i dont quite follow all this, but if you just want to change > > IValidationErrror#getErrorMessage() to return a Serializable instead > of a String im fine with that. > > -igor > > On Wed, Mar 14, 2012 at 6:17 AM, Martin Grigorov <[hidden email]> wrote: >> Hi, >> >> A colleague of mine asked me why ValidationError doesn't work with >> Serializable as Component's #info, #error, #debug, ... methods. >> I looked deeper and I saw a solution: write a custom IValidationError >> which keeps the Serializable and use it later. >> >> Problem 1) IValidationError requires from me to deal with IErrorMessageSource >> In my case with our custom FeedbackPanel that knows how to render our >> custom Serializables this is not needed >> Workaround: just return empty string to keep FormComponent#error() >> quiet (otherwise it logs a warning if the returned message is null) >> >> Problem 2) With my custom IValidationError impl I have to override >> FormComponent#error() to be able to use it >> >> And here I start thinking that IErrorMessageSource is something that >> is related to org.apache.wicket.validation.ValidationError because it >> works with resource keys (message bundles). >> I think it would be better if IValidationError actually had a method >> that returns a Serializable. In this case the current code of >> FormComponent#error() will be in o.a.w.validation.ValidationError and >> it will return org.apache.wicket.markup.html.form.ValidationErrorFeedback. >> And my custom IValidationError will return my custom Serializable impl >> >> So the new body of FormComponent#error(IValidatable) will be: >> >> public void error(IValidationError error) >> { >> error(error.getMessage()); // getMessage() returns the Serializable >> } >> >> I doubt there are many custom impls of IErrorMessageSource in the wild. >> >> -- >> Martin Grigorov >> jWeekend >> Training, Consulting, Development >> http://jWeekend.com -- Martin Grigorov jWeekend Training, Consulting, Development http://jWeekend.com |
|
by default the message should bring the error with it, thus
ValidationErrorFeedback. this is so users can customize feedbackpanels and get access to ValidationError instances. sounds like your code should check for ValidationErrorFeedback and pull your message out of it... -igor On Wed, Mar 14, 2012 at 8:48 AM, Martin Grigorov <[hidden email]> wrote: > You almost got it :-) > Returning Serializable instead of String is half of it. > The other half is to replace > > error(new ValidationErrorFeedback(error, message)); > with > error(message); > > in FormComponent#error() > > The 'message' can bring the 'error' that produced it if it needs it. > > OK ? > Wicket 6.0 only of course. > > On Wed, Mar 14, 2012 at 5:41 PM, Igor Vaynberg <[hidden email]> wrote: >> i dont quite follow all this, but if you just want to change >> >> IValidationErrror#getErrorMessage() to return a Serializable instead >> of a String im fine with that. >> >> -igor >> >> On Wed, Mar 14, 2012 at 6:17 AM, Martin Grigorov <[hidden email]> wrote: >>> Hi, >>> >>> A colleague of mine asked me why ValidationError doesn't work with >>> Serializable as Component's #info, #error, #debug, ... methods. >>> I looked deeper and I saw a solution: write a custom IValidationError >>> which keeps the Serializable and use it later. >>> >>> Problem 1) IValidationError requires from me to deal with IErrorMessageSource >>> In my case with our custom FeedbackPanel that knows how to render our >>> custom Serializables this is not needed >>> Workaround: just return empty string to keep FormComponent#error() >>> quiet (otherwise it logs a warning if the returned message is null) >>> >>> Problem 2) With my custom IValidationError impl I have to override >>> FormComponent#error() to be able to use it >>> >>> And here I start thinking that IErrorMessageSource is something that >>> is related to org.apache.wicket.validation.ValidationError because it >>> works with resource keys (message bundles). >>> I think it would be better if IValidationError actually had a method >>> that returns a Serializable. In this case the current code of >>> FormComponent#error() will be in o.a.w.validation.ValidationError and >>> it will return org.apache.wicket.markup.html.form.ValidationErrorFeedback. >>> And my custom IValidationError will return my custom Serializable impl >>> >>> So the new body of FormComponent#error(IValidatable) will be: >>> >>> public void error(IValidationError error) >>> { >>> error(error.getMessage()); // getMessage() returns the Serializable >>> } >>> >>> I doubt there are many custom impls of IErrorMessageSource in the wild. >>> >>> -- >>> Martin Grigorov >>> jWeekend >>> Training, Consulting, Development >>> http://jWeekend.com > > > > -- > Martin Grigorov > jWeekend > Training, Consulting, Development > http://jWeekend.com |
|
This will work as well.
Currently our code uses a lot Component#error(OurSerializableClass) and our custom FeedbackPanel checks for specializations of OurSerializableClass. With your suggestion FeedbackPanel will have to check for ValidationErrorFeedback then get our custom IValidationError out of it and then extract our OurSerializableClass out of the error. So it is just few more steps to get to the Serializable ... I'll prepare a patch. On Wed, Mar 14, 2012 at 5:59 PM, Igor Vaynberg <[hidden email]> wrote: > by default the message should bring the error with it, thus > ValidationErrorFeedback. this is so users can customize feedbackpanels > and get access to ValidationError instances. > > sounds like your code should check for ValidationErrorFeedback and > pull your message out of it... > > -igor > > > On Wed, Mar 14, 2012 at 8:48 AM, Martin Grigorov <[hidden email]> wrote: >> You almost got it :-) >> Returning Serializable instead of String is half of it. >> The other half is to replace >> >> error(new ValidationErrorFeedback(error, message)); >> with >> error(message); >> >> in FormComponent#error() >> >> The 'message' can bring the 'error' that produced it if it needs it. >> >> OK ? >> Wicket 6.0 only of course. >> >> On Wed, Mar 14, 2012 at 5:41 PM, Igor Vaynberg <[hidden email]> wrote: >>> i dont quite follow all this, but if you just want to change >>> >>> IValidationErrror#getErrorMessage() to return a Serializable instead >>> of a String im fine with that. >>> >>> -igor >>> >>> On Wed, Mar 14, 2012 at 6:17 AM, Martin Grigorov <[hidden email]> wrote: >>>> Hi, >>>> >>>> A colleague of mine asked me why ValidationError doesn't work with >>>> Serializable as Component's #info, #error, #debug, ... methods. >>>> I looked deeper and I saw a solution: write a custom IValidationError >>>> which keeps the Serializable and use it later. >>>> >>>> Problem 1) IValidationError requires from me to deal with IErrorMessageSource >>>> In my case with our custom FeedbackPanel that knows how to render our >>>> custom Serializables this is not needed >>>> Workaround: just return empty string to keep FormComponent#error() >>>> quiet (otherwise it logs a warning if the returned message is null) >>>> >>>> Problem 2) With my custom IValidationError impl I have to override >>>> FormComponent#error() to be able to use it >>>> >>>> And here I start thinking that IErrorMessageSource is something that >>>> is related to org.apache.wicket.validation.ValidationError because it >>>> works with resource keys (message bundles). >>>> I think it would be better if IValidationError actually had a method >>>> that returns a Serializable. In this case the current code of >>>> FormComponent#error() will be in o.a.w.validation.ValidationError and >>>> it will return org.apache.wicket.markup.html.form.ValidationErrorFeedback. >>>> And my custom IValidationError will return my custom Serializable impl >>>> >>>> So the new body of FormComponent#error(IValidatable) will be: >>>> >>>> public void error(IValidationError error) >>>> { >>>> error(error.getMessage()); // getMessage() returns the Serializable >>>> } >>>> >>>> I doubt there are many custom impls of IErrorMessageSource in the wild. >>>> >>>> -- >>>> Martin Grigorov >>>> jWeekend >>>> Training, Consulting, Development >>>> http://jWeekend.com >> >> >> >> -- >> Martin Grigorov >> jWeekend >> Training, Consulting, Development >> http://jWeekend.com -- Martin Grigorov jWeekend Training, Consulting, Development http://jWeekend.com |
|
https://issues.apache.org/jira/browse/WICKET-4449
On Wed, Mar 14, 2012 at 6:07 PM, Martin Grigorov <[hidden email]> wrote: > This will work as well. > Currently our code uses a lot Component#error(OurSerializableClass) > and our custom FeedbackPanel checks for specializations of > OurSerializableClass. > With your suggestion FeedbackPanel will have to check for > ValidationErrorFeedback then get our custom IValidationError out of it > and then extract our OurSerializableClass out of the error. So it is > just few more steps to get to the Serializable ... > > I'll prepare a patch. > > On Wed, Mar 14, 2012 at 5:59 PM, Igor Vaynberg <[hidden email]> wrote: >> by default the message should bring the error with it, thus >> ValidationErrorFeedback. this is so users can customize feedbackpanels >> and get access to ValidationError instances. >> >> sounds like your code should check for ValidationErrorFeedback and >> pull your message out of it... >> >> -igor >> >> >> On Wed, Mar 14, 2012 at 8:48 AM, Martin Grigorov <[hidden email]> wrote: >>> You almost got it :-) >>> Returning Serializable instead of String is half of it. >>> The other half is to replace >>> >>> error(new ValidationErrorFeedback(error, message)); >>> with >>> error(message); >>> >>> in FormComponent#error() >>> >>> The 'message' can bring the 'error' that produced it if it needs it. >>> >>> OK ? >>> Wicket 6.0 only of course. >>> >>> On Wed, Mar 14, 2012 at 5:41 PM, Igor Vaynberg <[hidden email]> wrote: >>>> i dont quite follow all this, but if you just want to change >>>> >>>> IValidationErrror#getErrorMessage() to return a Serializable instead >>>> of a String im fine with that. >>>> >>>> -igor >>>> >>>> On Wed, Mar 14, 2012 at 6:17 AM, Martin Grigorov <[hidden email]> wrote: >>>>> Hi, >>>>> >>>>> A colleague of mine asked me why ValidationError doesn't work with >>>>> Serializable as Component's #info, #error, #debug, ... methods. >>>>> I looked deeper and I saw a solution: write a custom IValidationError >>>>> which keeps the Serializable and use it later. >>>>> >>>>> Problem 1) IValidationError requires from me to deal with IErrorMessageSource >>>>> In my case with our custom FeedbackPanel that knows how to render our >>>>> custom Serializables this is not needed >>>>> Workaround: just return empty string to keep FormComponent#error() >>>>> quiet (otherwise it logs a warning if the returned message is null) >>>>> >>>>> Problem 2) With my custom IValidationError impl I have to override >>>>> FormComponent#error() to be able to use it >>>>> >>>>> And here I start thinking that IErrorMessageSource is something that >>>>> is related to org.apache.wicket.validation.ValidationError because it >>>>> works with resource keys (message bundles). >>>>> I think it would be better if IValidationError actually had a method >>>>> that returns a Serializable. In this case the current code of >>>>> FormComponent#error() will be in o.a.w.validation.ValidationError and >>>>> it will return org.apache.wicket.markup.html.form.ValidationErrorFeedback. >>>>> And my custom IValidationError will return my custom Serializable impl >>>>> >>>>> So the new body of FormComponent#error(IValidatable) will be: >>>>> >>>>> public void error(IValidationError error) >>>>> { >>>>> error(error.getMessage()); // getMessage() returns the Serializable >>>>> } >>>>> >>>>> I doubt there are many custom impls of IErrorMessageSource in the wild. >>>>> >>>>> -- >>>>> Martin Grigorov >>>>> jWeekend >>>>> Training, Consulting, Development >>>>> http://jWeekend.com >>> >>> >>> >>> -- >>> Martin Grigorov >>> jWeekend >>> Training, Consulting, Development >>> http://jWeekend.com > > > > -- > Martin Grigorov > jWeekend > Training, Consulting, Development > http://jWeekend.com -- Martin Grigorov jWeekend Training, Consulting, Development http://jWeekend.com |
| Powered by Nabble | Edit this page |
