Martjin Dashort pointed out component.setmarkupid() to me yesterday. It
works perfectly for my purposes. Thank you!

Here is my little Stateless demo app.

    public HomePage(final PageParameters parameters) {
        final String _counter = getParameter(parameters, COUNTER_PARAM);
        final int counter = _counter != null ?
Integer.parseInt(_counter) : 0;
        final Label c2 = new Label("c2", Integer.toString(counter));
        final PageParameters updated = updateParams(counter);
        final Link<?> c2Link = new
StatelessAjaxFallbackLink<Void>("c2-link",
                null, updated) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(final AjaxRequestTarget target) {
                if (target != null) {
                    target.addComponent(c2);
                }
            }
        };

        c2.setMarkupId(c2.getId()); // Required to make stateless Ajax
work
        c2.setOutputMarkupId(true);
        add(c2Link);
        add(c2);
    }

The StatelessAjaxFallbackLink code is all yours, if you want it.

On Mon, 2010-02-08 at 09:38 -0800, Igor Vaynberg wrote:

> ajaxrequesttarget will now also call component.setmarkupid() for you...
> 
> -igor
> 
> On Sun, Feb 7, 2010 at 11:34 PM, Joachim Kainz <j...@jolira.com> wrote:
> > Wicket managing the id is not an option, as the generated id is tied
> > to the session (and therefore not stateless).
> >
> > SetMarkupId on the other hand works great. Thank you! :)
> >
> > Sent from my iPhone
> >
> > On Feb 7, 2010, at 11:29 PM, Martijn Dashorst <martijn.dasho...@gmail.com
> >  > wrote:
> >
> >> just call setMarkupId("c2") or let wicket manage the ID.
> >>
> >> Martijn
> >>
> >> On Mon, Feb 8, 2010 at 6:51 AM, Joachim F. Kainz <j...@jolira.com>
> >> wrote:
> >>> Igor,
> >>>
> >>> Thank you for responding back.
> >>>
> >>> Here is the code that I am using:
> >>>
> >>>        final Label c2 = new Label("c2", Integer.toString(counter));
> >>>        final Link<?> c2Link = new
> >>> StatelessAjaxFallbackLink<Void>("c2-link",
> >>>                null, updatedParameters) {
> >>>            private static final long serialVersionUID = 1L;
> >>>
> >>>            @Override
> >>>            public void onClick(final AjaxRequestTarget target) {
> >>>                if (target != null) {
> >>>                    target.addComponent(c2, "c2");
> >>>                }
> >>>            }
> >>>        };
> >>>
> >>> Here is my HTML:
> >>>
> >>> <span wicket:id="c2" id="c2"></span>
> >>> <a href="#" wicket:id="c2-link">increment</a>
> >>>
> >>> Instead of calling c2.setOutputMarkupId(true), I am passing the ID
> >>> ("c2") to the component, which means that my
> >>> StatelessAjaxFallbackLink
> >>> works perfectly the first time around. The HTML that is generated for
> >>> the C2 span unfortunately contains the wrong ID the second time
> >>> around,
> >>> because the Component#setOutputMarkupId(true) executed as part of
> >>> AjaxRequestTarget#respondComponent(Response, String, Component)
> >>> generates the wrong id.
> >>>
> >>> Without the call to Component#setOutputMarkupId(true) the id would
> >>> just
> >>> remain "c2" and my StatelessAjaxFallbackLink would work perfectly.
> >>>
> >>> BTW: The call to Component#setOutputMarkupId(true) is redundant
> >>> anyway
> >>> as AjaxRequestTarget#addComponent(Component) already enforces that
> >>> the
> >>> value must be true...
> >>>
> >>> Best regards,
> >>>
> >>> Joachim
> >>>
> >>> On Sun, 2010-02-07 at 20:18 -0800, Igor Vaynberg wrote:
> >>>
> >>>> Why remove it?
> >>>>
> >>>> -Igor
> >>>>
> >>>>
> >>>> On Sunday, February 7, 2010, Joachim F. Kainz <j...@jolira.com>
> >>>> wrote:
> >>>>> Dear Developers,
> >>>>>
> >>>>> I am working for a very, very, very large global retailer and we
> >>>>> are
> >>>>> about to roll out a very high-volume mobile application using
> >>>>> Wicket.
> >>>>>
> >>>>> In order to support some of the requirements we have I have been
> >>>>> working
> >>>>> on adding a few more stateless components to Wicket. As one
> >>>>> example, I
> >>>>> added a StatelessAjaxFailbankLink. I also added a StatelessLink
> >>>>> that
> >>>>> works better for our app. The code is APL2 licensed and available
> >>>>> at
> >>>>> http://jolira-tools.googlecode.com/svn/wicket-stateless/trunk/
> >>>>> together
> >>>>> with  demo application.
> >>>>>
> >>>>> The demo works perfectly, when clicking on the link the first
> >>>>> time. The
> >>>>> second time it does not. The reason for this problem is that
> >>>>> AjaxRequestTarget#respondComponent(Response, String, Component)
> >>>>> method
> >>>>> calls Component#setOutputMarkupId(boolean) with a value of true.
> >>>>>
> >>>>> I looked for quite a while but I have not found a way to override
> >>>>> this
> >>>>> behavior anywhere. I would greatly appreciate it, if somebody could
> >>>>> suggest an approach or if somebody could suggest how to remove
> >>>>> this line
> >>>>> from the AjaxRequestTarget in a future version of the wicket code.
> >>>>> Removing the line should be side-effect free as, in cases this
> >>>>> line is
> >>>>> actually used, this setting is verified earlier in the code.
> >>>>>
> >>>>> Best regards,
> >>>>>
> >>>>> Joachim
> >>>>>
> >>>>>
> >>>
> >>
> >>
> >>
> >> --
> >> Become a Wicket expert, learn from the best: http://wicketinaction.com
> >> Apache Wicket 1.4 increases type safety for web applications
> >> Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.4.4
> >

Reply via email to