[
https://issues.apache.org/jira/browse/WICKET-1213?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Peter Ertl updated WICKET-1213:
-------------------------------
Description:
In my wicket programming life I always had some trouble with the ajax part when
wanting stuff like this:
- "Always update a common feedback panel from my template page"
--> add 'target.addComponent(feedbackPanel)' just _everywhere_ (very
cumbersome and not elegant at all)
- add a listener using AjaxRequestTarget#addListener
--> not quite possible without subclassing the request cycle (which is *yuk*
if you ask me) to catch the short moment in between AjaxRequestTarget is
instantiated and IRequestTarget#onRespond() is called
- automatically set focus on the first form component with errors
--> add bulky code into all onError() to check for the proper component and
call AjaxRequestTarget#setFocus
- add some common function like
AjaxRequestTarget#yellowFadeEffect(FormComponent)
--> have some utility method and call it like this:
AjaxUtil.yellowFade(target) -- not nice as functionality like this should
really belong to the ajax target which represents the ajax request / response.
I found that all these issues can be solved very elegantly if you could just
catch the moment where AjaxRequestTarget is instantiated.
I attached a very little patch (!) which enables you to
- subclass
- add listeners to
the AjaxRequestTarget
In AbstractDefaultAjaxBehavior:281
public final void onRequest()
{
AjaxRequestTarget target = new
AjaxRequestTarget(getComponent().getPage()); // *******
RequestCycle.get().setRequestTarget(target);
respond(target)
}
is changed to
public final void onRequest()
{
AjaxRequestTarget target =
getComponent().getPage().newAjaxRequestTarget(); // *******
RequestCycle.get().setRequestTarget(target);
respond(target);
}
org.apache.wicket.Page will have an additional method:
public AjaxRequestTarget newAjaxRequestTarget()
{
return new AjaxRequestTarget(this);
}
}
so by overriding newAjaxRequestTarget in your page you could customize or
subclass the ajax response very easily
also, this will not break current code but is just an enhancement you will not
notice unless you need it.
was:
In my wicket programming life I always had some trouble with the ajax part when
wanting stuff like this:
- "Always update a common feedback panel from my template page"
--> add 'target.addComponent(feedbackPanel)' just _everywhere_ (very
cumbersome and not elegant at all)
- add a listener using AjaxRequestTarget#addListener
--> not quite possible without subclassing the request cycle (which is *yuk*
if you ask me) to catch the short moment in between AjaxRequestTarget is
instantiated and IRequestTarget#onRespond() is called
- automatically set focus on the first form component with errors
--> add bulky code into all onError() to check for the proper component and
call AjaxRequestTarget#setFocus
- add some common function like
AjaxRequestTarget#yellowFadeEffect(FormComponent)
--> have some utility method and call it like this:
AjaxUtil.yellowFade(target) -- not nice as functionality like this should
really belong to the ajax target which represents the ajax request / response.
I found that all these issues can be solved very elegantly if you could just
catch the moment where AjaxRequestTarget is instantiated.
I attached a very little patch (!) which enables you to
- subclass
- add listeners to
the AjaxRequestTarget
In AbstractDefaultAjaxBehavior:281
public final void onRequest()
{
AjaxRequestTarget target = new
AjaxRequestTarget(getComponent().getPage()); // *******
RequestCycle.get().setRequestTarget(target);
respond(target);
}
is changed to
public final void onRequest()
{
AjaxRequestTarget target =
getComponent().getPage().newAjaxRequestTarget(); // *******
RequestCycle.get().setRequestTarget(target);
respond(target);
}
org.apache.wicket.Page will have an additional method:
public AjaxRequestTarget newAjaxRequestTarget()
{
return new AjaxRequestTarget(this);
}
}
so by overriding newAjaxRequestTarget in your page you could customize or
subclass the ajax response very easily
also, this will not break current code but is just an enhancement you will not
notice unless you need it.
> enable subclassing of AjaxRequestTarget
> ---------------------------------------
>
> Key: WICKET-1213
> URL: https://issues.apache.org/jira/browse/WICKET-1213
> Project: Wicket
> Issue Type: Wish
> Components: wicket
> Reporter: Peter Ertl
> Attachments: AjaxRequestTarget_with_subclassing.patch
>
>
> In my wicket programming life I always had some trouble with the ajax part
> when wanting stuff like this:
> - "Always update a common feedback panel from my template page"
> --> add 'target.addComponent(feedbackPanel)' just _everywhere_ (very
> cumbersome and not elegant at all)
> - add a listener using AjaxRequestTarget#addListener
> --> not quite possible without subclassing the request cycle (which is
> *yuk* if you ask me) to catch the short moment in between AjaxRequestTarget
> is instantiated and IRequestTarget#onRespond() is called
> - automatically set focus on the first form component with errors
> --> add bulky code into all onError() to check for the proper component
> and call AjaxRequestTarget#setFocus
> - add some common function like
> AjaxRequestTarget#yellowFadeEffect(FormComponent)
> --> have some utility method and call it like this:
> AjaxUtil.yellowFade(target) -- not nice as functionality like this should
> really belong to the ajax target which represents the ajax request / response.
> I found that all these issues can be solved very elegantly if you could just
> catch the moment where AjaxRequestTarget is instantiated.
> I attached a very little patch (!) which enables you to
> - subclass
> - add listeners to
> the AjaxRequestTarget
> In AbstractDefaultAjaxBehavior:281
> public final void onRequest()
> {
> AjaxRequestTarget target = new
> AjaxRequestTarget(getComponent().getPage()); // *******
> RequestCycle.get().setRequestTarget(target);
> respond(target)
> }
> is changed to
> public final void onRequest()
> {
> AjaxRequestTarget target =
> getComponent().getPage().newAjaxRequestTarget(); // *******
> RequestCycle.get().setRequestTarget(target);
> respond(target);
> }
> org.apache.wicket.Page will have an additional method:
> public AjaxRequestTarget newAjaxRequestTarget()
> {
> return new AjaxRequestTarget(this);
> }
> }
> so by overriding newAjaxRequestTarget in your page you could customize or
> subclass the ajax response very easily
> also, this will not break current code but is just an enhancement you will
> not notice unless you need it.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.