I tested this idea by adding the code below to my web application
object. Problem was though,
that when viewing the variables in debugger, the enclosure object didn't
seem to be included in
the tree of the parent objects. It was as if the enclosure was invisible to
them. Perhaps because
Enclosure is a transparent resolver?
object tree in my application:
- page
- enclosure
- div (the parent of this was shown to be page, not the enclosure)
Code:
//-----------------------------
@Override public AjaxRequestTarget newAjaxRequestTarget(Page page) {
AjaxRequestTarget target = super.newAjaxRequestTarget(page);
target.addListener(new AjaxRequestTarget.IListener() { public void
onBeforeRespond(Map<String, Component> map, AjaxRequestTarget target) {
for(Component component : map.values()) { Enclosure parentEnclosure =
component.findParent(Enclosure.class); if (parentEnclosure != null) {
Enclosure topParent = new Enclosure("DUMMY", "DUMMY"); while (topParent !=
null) { topParent = parentEnclosure.findParent(Enclosure.class); if
(topParent != null) { parentEnclosure = topParent; } }
target.addComponent(parentEnclosure); } } } public void
onAfterRespond(Map<String, Component> map, IJavascriptResponse response) {}
}); return target; };
//-----------------------
On Fri, Jan 21, 2011 at 3:07 AM, Jeremy Thomerson <[email protected]
> wrote:
> On Thu, Jan 20, 2011 at 1:51 PM, Igor Vaynberg <[email protected]
> >wrote:
>
> > interesting idea. i think this would require a bit of a trick.
> >
> > a) modify enclosure tag handler to accept an attribute instead of a tag
> > b) modify enclosure tag handler to add a bit of metadata to the
> > component marking that it belongs to an enclosure
> > c) add a ajaxrequesttarget.listener to the request target that checks
> > for this bit of metadata and adds the enclosure container to the ajax
> > request target.
> >
> > not sure how feasible this all is because the enclosure container is
> > an auto component. but, you are welcome to tinker around.
> >
> > -igor
>
>
> I, too, like the idea. Couldn't it be simpler? Couldn't he:
>
> 1: Override newAjaxRequestTarget in WebApplication
> 2: When he creates an ART, add a listener to it.
> 3: In the listener, in onBeforeRespond, do this:
>
> for(Component component : map.values()) {
> Enclosure parentEnclosure = component.findParent(Enclosure.class);
> while (parentEnclosure != null) {
> Enclosure topParent = parentEnclosure.findParent(Enclosure.class);
> if (topParent != null) {
> parentEnclosure = topParent;
> }
> }
> if (parentEnclosure != null) {
> addComponent(parentEnclosure);
> }
> }
>
>
>
> --
> Jeremy Thomerson
> http://wickettraining.com
> *Need a CMS for Wicket? Use Brix! http://brixcms.org*
>