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/

Reply via email to