On Sat, Jan 15, 2011 at 4:17 AM, Leszek Gawron <lgaw...@apache.org> wrote:

> Jeremy,
>
>
> On 2011-01-14 03:57, Jeremy Thomerson wrote:
>
>>  I had encountered this issue and for one of my training classes, I threw
>>>>> together a solution.  Your post prodded me to go ahead and post my
>>>>>
>>>> solution
>>>
>>>> as a blog post.  After dusting off my long-forgotten blog, here it is:
>>>>> http://www.jeremythomerson.com/blog/2011/01/catching-all-feedback
>>>>> -messages-that-arent-rendered-by-other-feedback-panels/ (or
>>>>> http://bit.ly/eHUEuN if that gets chopped up).
>>>>>
>>>>
> Your solution is quite nice but I have a request: you use
> ComponentFeedbackMessageFilter. What if I wanted your functionality in some
> component only - not whole page - using ContainerFeedbackMessageFilter.
>
> Example:
>
> instead of yours:
>
>  // create the form above
>> form.add(new FeedbackPanel("feedback", new
>> ComponentFeedbackMessageFilter(form)));
>>
>>
>> final TextField name = new TextField("name", new
>> PropertyModel(productModel, "name"));
>> name.setRequired(true);
>> form.add(new FeedbackPanel("nameFeedback", new
>> ComponentFeedbackMessageFilter(name)));
>> form.add(name);
>>
>> final TextField price = new TextField("price", new
>> PropertyModel(productModel, "price"));
>> price.setRequired(true);
>> price.add(new MinimumValidator(0d));
>> form.add(new FeedbackPanel("priceFeedback", new
>> ComponentFeedbackMessageFilter(price)));
>> form.add(price);
>>
>
>
> I would love:
>
>  // create the form above
>> form.add(new FeedbackPanel("feedback", new
>> RenderOnlyWhatMyChildrenMissedFeedbackMessageFilter(form)));
>>
>                                             ^^^^^^^^^^^^^^^^ [1]
>
>>
>> final TextField name = new TextField("name", new
>> PropertyModel(productModel, "name"));
>> name.setRequired(true);
>> form.add(new FeedbackPanel("nameFeedback", new
>> ComponentFeedbackMessageFilter(name)));
>> form.add(name);
>>
>> final TextField price = new TextField("price", new
>> PropertyModel(productModel, "price"));
>> price.setRequired(true);
>> price.add(new MinimumValidator(0d));
>>
>
>
>  form.add(new FeedbackPanel("priceFeedback", new
>> ComponentFeedbackMessageFilter(price)));
>>
> ^^^^^^^^^^^^^^^^^^^^^^^^^6 remove this line.
>
>  form.add(price);
>>
>
> This way nameFeedback renders messages for name component
>
> "feedback" renders messages for "price" and other components left without
> own feedback panel but NOT from "name" as those messages would be rendered
> twice.
>
>
> All we need is a slight modification of AllExceptFeedbackFilter that would
> take a root component instead of assuming page instance.
>
> You code from example then could look something like;
>
>  // create the form above
>>
>> final TextField name = new TextField("name", new
>> PropertyModel(productModel, "name"));
>> name.setRequired(true);
>> form.add(new FeedbackPanel("nameFeedback", new
>> ComponentFeedbackMessageFilter(name)));
>> form.add(name);
>>
>> final TextField price = new TextField("price", new
>> PropertyModel(productModel, "price"));
>> price.setRequired(true);
>> price.add(new MinimumValidator(0d));
>> form.add(price);
>>
>> form.add(new FeedbackPanel("feedback", new
>> AllExceptFeedbackFilter(form)));
>>
>
> hope you like the idea.
>
> --
> Leszek Gawron                              http://lgawron.blogspot.com
>


Leszek,

  I *do* like the idea.  I will implement it this way when I add it to core.

-- 
Jeremy Thomerson
http://wickettraining.com
*Need a CMS for Wicket?  Use Brix! http://brixcms.org*

Reply via email to