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*