No the after render of a component is called after the page render to clean up stuff. Just as onBeforeRender is called before the page is starting to render
On 5/17/08, Eyal Golan <[EMAIL PROTECTED]> wrote: > Isn't this is what I did? > Anyway, here's an example of what I get. > First: the Java code: > public final class TestButtonPage extends WebPage { > public TestButtonPage() { > add(new ExtendingButton("extendingButton")); > Button other = new Button("behavioralButton"); > other.add(new MyBehavior()); > add(other); > } > > class ExtendingButton extends Button { > private static final long serialVersionUID = 1L; > > public ExtendingButton(String id) { > super(id); > } > > @Override > protected void onAfterRender() { > > getResponse().write("<span>ExtendingButton.onAfterRender()</span>"); > super.onAfterRender(); > } > } > > class MyBehavior extends AbstractBehavior { > private static final long serialVersionUID = 1L; > > @Override > public void onRendered(Component component) { > > component.getResponse().write("<span>AbstractBehavior.onRendered(...)</span>"); > } > } > } > > This is the markup: > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> > <html xmlns="http://www.w3.org/1999/xhtml" > xmlns:wicket="http://wicket.apache.org/" xml:lang="en" lang="en"> > <head> > <title>Button Test</title> > </head> > <body> > <button wicket:id="extendingButton">Extending Button</button><br/> > <button wicket:id="behavioralButton">Behavioral Button</button><br/> > </body> > <br /> > <span>This is just before the html closing tag</span> > <br /> > </html> > > And this is the output (taken from view source in my FF browser): > > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> > <html xmlns="http://www.w3.org/1999/xhtml" > xmlns:wicket="http://wicket.apache.org/" xml:lang="en" lang="en"> > <head> > <title>Button Test</title> > </head> > <body> > <button id="extendingButton1" name="extendingButton" > wicket:id="extendingButton">Extending Button</button><br/> > <button id="behavioralButton2" name="behavioralButton" > wicket:id="behavioralButton">Behavioral > Button</button><span>AbstractBehavior.onRendered(...)</span><br/> > </body> > <br /> > <span>This is just before the html closing tag</span> > <br /> > > </html> > > <span>ExtendingButton.onAfterRender()</span> > > As you can see, the behavior put the <span> tag just after the button, but > the "extendingButton" put the <span> tag after the closing tag of the html. > > Is this the correct behavior? > > thanks > > On Thu, May 15, 2008 at 4:38 PM, Johan Compagner <[EMAIL PROTECTED]> > wrote: > >> get the components markupid from the component itself. >> >> johan >> >> >> On Thu, May 15, 2008 at 3:03 PM, Eyal Golan <[EMAIL PROTECTED]> wrote: >> >> > thanks, >> > that's exactly what I did. >> > I add to my component (button) an AbstarctBehavior, which is an >> > IHeaderContributor. >> > I even override renderHead: >> > @Override >> > public void renderHead(IHeaderResponse response) { >> > >> > response.renderCSSReference("/eurekify/style/button/EurekifyButton.css"); >> > >> > >> > >> response.renderJavascriptReference("/eurekify/style/button/EurekifyButton.js"); >> > // response.renderJavascriptReference(new >> > JavascriptResourceReference( >> > // EurekifyButtonBehavior.class, "resizeScript.js")); >> > } >> > >> > The script I am adding to each button comes from a utility class: >> > static String getResizeScript(String markupId) { >> > StringBuilder strBuilder = new StringBuilder(); >> > strBuilder.append("<script language=\"javascript\">"); >> > strBuilder.append("document.getElementById('btnObj_"); >> > strBuilder.append(markupId); >> > strBuilder.append("').style.width = calcBtnSize('"); >> > strBuilder.append(markupId).append("')"); >> > strBuilder.append("</script>"); >> > return strBuilder.toString(); >> > } >> > >> > This is the script that I mentioned in my first question. >> > >> > Again: >> > If I call this script in the Button class, in the onAfterRender() >> > method, >> > it >> > is added to the end of the output HTML. >> > If I call this in the behavior, in the onRendered(Component component), >> it >> > is added just after the </button>. >> > >> > I did something like this in the onload script: >> > window.onload = function(id) { >> > document.getElementById('btnObj_'+id).style.width = function(id) >> > {calcBtnSize(id)}; >> > } >> > >> > firebug says that it can't find document.getElementById('btnObj_'+id) >> > ... >> > On Thu, May 15, 2008 at 3:50 PM, Johan Compagner <[EMAIL PROTECTED]> >> > wrote: >> > >> > > you can also do it on component >> > > public void renderHead(final HtmlHeaderContainer container) >> > > >> > > or let the component implement IHeaderContributor >> > > >> > > i guess that renderHead(final HtmlHeaderContainer container) shouldnt >> be >> > > public but more protected or final.. >> > > >> > > johan >> > > >> > > >> > > On Thu, May 15, 2008 at 2:44 PM, Eyal Golan <[EMAIL PROTECTED]> >> wrote: >> > > >> > > > ok. thank, I'll try it (though I have never written JavaScript till >> > > > a >> > few >> > > > days ago...) >> > > > BTW, why is the difference between the overriding method and the >> > behavior >> > > > method? >> > > > >> > > > On Thu, May 15, 2008 at 2:52 PM, Johan Compagner < >> [EMAIL PROTECTED] >> > > >> > > > wrote: >> > > > >> > > > > use a behavior that adds an onDocumentLoad/Ready script to the >> > browser >> > > > > >> > > > > On Thu, May 15, 2008 at 12:35 PM, Eyal Golan <[EMAIL PROTECTED]> >> > > wrote: >> > > > > >> > > > > > Hello, >> > > > > > I have a MyButton that extends Button. >> > > > > > I have a JavaScript that I need to ad to the output markup after >> > the >> > > > > > button's markup. >> > > > > > I'm trying to do this with two differnet options: >> > > > > > Either I Override onAfterRender in MyButton: >> > > > > > @Override >> > > > > > protected void onAfterRender() { >> > > > > > if (isVisible()) { >> > > > > > >> > > getResponse().write(Consts.getResizeScript(getMarkupId())); >> > > > > > } >> > > > > > super.onAfterRender(); >> > > > > > } >> > > > > > >> > > > > > Or, I add to the button a behavior and write this: >> > > > > > @Override >> > > > > > public void onRendered(Component component) { >> > > > > > if (component.isVisible()) { >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> component.getResponse().write(Consts.getResizeScript(component.getMarkupId())); >> > > > > > } >> > > > > > >> > > > > > } >> > > > > > >> > > > > > Now, the situation is like this: >> > > > > > Using the first option (override in the component), the script >> > > > > > is >> > > added >> > > > > to >> > > > > > the end of the html. Just after the </html> >> > > > > > Using the second option (the behavior), the script is added just >> > > after >> > > > > the >> > > > > > close tag of the button </button>. >> > > > > > >> > > > > > Using FF, all is ok, but in IE7, there's a problem in >> > > > > > calculating >> > the >> > > > > size >> > > > > > and the button is not shown correctly. >> > > > > > >> > > > > > What causes the differences? and how can I manipulate the >> behavior >> > to >> > > > > work >> > > > > > like option 1 ? >> > > > > > >> > > > > > Thanks very much... >> > > > > > >> > > > > > -- >> > > > > > Eyal Golan >> > > > > > [EMAIL PROTECTED] >> > > > > > >> > > > > > Visit: http://jvdrums.sourceforge.net/ >> > > > > > >> > > > > >> > > > >> > > > >> > > > >> > > > -- >> > > > Eyal Golan >> > > > [EMAIL PROTECTED] >> > > > >> > > > Visit: http://jvdrums.sourceforge.net/ >> > > > >> > > >> > >> > >> > >> > -- >> > Eyal Golan >> > [EMAIL PROTECTED] >> > >> > Visit: http://jvdrums.sourceforge.net/ >> > >> > > > > -- > Eyal Golan > [EMAIL PROTECTED] > > Visit: http://jvdrums.sourceforge.net/ > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]