[
https://issues.apache.org/jira/browse/WICKET-7055?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Martin Tzvetanov Grigorov resolved WICKET-7055.
-----------------------------------------------
Fix Version/s: 10.0.0
9.14.0
Assignee: Martin Tzvetanov Grigorov
Resolution: Fixed
> AjaxEventBehavior onload event unstable
> ---------------------------------------
>
> Key: WICKET-7055
> URL: https://issues.apache.org/jira/browse/WICKET-7055
> Project: Wicket
> Issue Type: Bug
> Components: wicket-core
> Reporter: Maximilian Reichel
> Assignee: Martin Tzvetanov Grigorov
> Priority: Minor
> Fix For: 10.0.0, 9.14.0
>
>
> As today the AjaxEventBehavior class is not compatible to be used with the
> onload event but I could not find this to be documented anywhere.
> When using the AjaxEventBehavior class to hook into the onload event, it
> works sometimes but it is not stable. This is because AjaxEventBehavior class
> itself uses the dom ready event to add the user-defined hooks to the page,
> but as clarified [here|https://github.com/jquery/jquery/issues/5075], the
> jQuery dom ready event may fires later than the onload event. In this
> instance the AjaxEventBehavior adds the user-defined onload hook after the
> onload event was already fired and therefore the user-defined hook is never
> executed.
> As a workaround (tested with wicket 6.18.0) I wrote this class which directly
> hooks onto the onload event:
> {code:java}
> import org.apache.wicket.Component;
> import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
> import org.apache.wicket.ajax.AjaxEventBehavior;
> import org.apache.wicket.ajax.AjaxRequestTarget;
> import org.apache.wicket.markup.head.IHeaderResponse;
> import org.apache.wicket.markup.head.OnLoadHeaderItem;
> public abstract class AjaxOnLoadEventBehavior extends
> AbstractDefaultAjaxBehavior {
> @Override
> public void renderHead(final Component component, final IHeaderResponse
> response) {
> super.renderHead(component, response);
> if (component.isEnabledInHierarchy())
> {
> CharSequence js = getCallbackScript(component);
> response.render(OnLoadHeaderItem.forScript(js.toString()));
> }
> }
> @Override
> protected void respond(AjaxRequestTarget target) {
> onLoad(target);
> }
> protected abstract void onLoad(final AjaxRequestTarget target);
> }
> {code}
> In my opinion this should be added to the documentation and the
> AjaxEventBehavior class should log a warning when used with the onload event.
> Maybe wicket could include a class like my AjaxOnLoadEventBehavior.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)