How to get the AjaxRequestTarget inside Wicket's onBeforeRender() method of a component?
Asked Answered
S

1

7

I have an Ajax event that triggers the redraw of various Wicket panels. Some panels have additional calculations of their own inside their onBeforeRender() method. If there is an error, I want to display it to the user. But I can't add the FeedbackPanel to the AjaxRequestTarget because I don't have access to it anymore inside the panel that is being redrawn.

Is there a way to get the AjaxRequestTarget inside onBeforeRender() of a Wicket component? Is it even possible to add additional components to the Ajax target once the first ones are already in onBeforeRender() state?

Is there a better way to add the FeedbackPanel to the Ajax target if only the panels that need to be redrawn can decide if there is an error or not?

Sparing answered 8/10, 2013 at 11:46 Comment(2)
I dont know what your app is doing but i doubt that business logic calculation on onBeforeRender() is a good idea.Playoff
There was a static AjaxRequestTarget.get() method back in Wicket 1.4 (seems to be gone in Wicket 6). However, as Robert already pointed out, validation logic and morevoer error reporting shouldn't be handled in onBeforeRender().Smithers
S
10

Getting the AjaxTarget is done like this:

AjaxRequestTarget target = requestCycle.find(AjaxRequestTarget.class);

Unfortunately, like expected, I can't add components to the target once I'm in the rendering phase. But Wicket provides the interface ITargetRespondListener with the method onTargetRespond(AjaxRequestTarget target). Here I can add anything I want to the target.

Sparing answered 8/10, 2013 at 13:58 Comment(2)
For future readers. When even less context is available: RequestCycle.get().find(AjaxRequestTarget.class)Janson
How to get it in Wicket version 8? It is not the same way cause when I update the dependencies to version 8 it says something is wrong, but in documentation the definition of find method is the sameGarett

© 2022 - 2024 — McMap. All rights reserved.