ok. But, looking at the Javadoc, this is what I see: In AbstractBehavior: /** * Called when a component that has this behavior coupled was rendered. * * @param component * the component that has this behavior coupled */ public void onRendered(Component component) { }
And in Component: /** * Called just after a component is rendered. */ protected void onAfterRender() { setFlag(FLAG_AFTER_RENDERING, false); } It looks to me that according to the API Javadoc the output should be same. But it isn't. Am I misunderstanding something or there's a minor bug? On Sat, May 17, 2008 at 1:45 PM, Johan Compagner <[EMAIL PROTECTED]> wrote: > 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] > > -- Eyal Golan [EMAIL PROTECTED] Visit: http://jvdrums.sourceforge.net/