the usecase: in onbeforerender we want to add some prepended
javascript to the ajaxrequesttarget, sort of like:

public class HomePage extends WebPage {
        private static final long serialVersionUID = 1L;
        private int teller = 0;
        public int getTeller() { return teller++; }

        public HomePage(final PageParameters parameters) {
                add(new Label("message",
                                new PropertyModel(this, "teller")) {

                        protected void onBeforeRender() {
                                super.onBeforeRender();
                                if (getRequestCycle().getRequestTarget() 
instanceof AjaxRequestTarget) {
                                        ((AjaxRequestTarget) 
getRequestCycle().getRequestTarget())
                                                        
.prependJavascript("alert('foo');");
                                }
                        }
                }.setOutputMarkupId(true));

                add(new AjaxLink("foo") {
                        public void onClick(AjaxRequestTarget target) {
                                
target.addComponent(HomePage.this.get("message"));
                        }
                });
        }
}

But this obviously doesn't work, since onbeforerender is called after
the prepended javascripts are added to the ajax request target. There
are some ways to solve this conundrum:

1. do the before render cycle before prepend javascripts, prepend
javascript, render, append javascript
2. render to temporary string, prepend javascript, append javascript,
concatenate in correct order
3. adjust wicket-ajax.js / communication protocal to 'type' the
various elements, and let wicket-ajax first call prepend, replace
component, append javascript.

Any other ideas?

Martijn

Reply via email to