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/