The UrlGenerator class is used somewhere where the Page is available, no ?
In SomeComponent/SomeBehavior:

UrlGenerator generator = new UrlGenerator();
Url url = generator.generate(getPage().getPageId());

Session.get().getPageManager().getPage(exisingAndNonExpiredPageId) is the
way to get a reference to the page.
Wicket uses this API internally every time you click a link or button.

Martin Grigorov
Wicket Training and Consulting
https://twitter.com/mtgrigorov


On Tue, Sep 9, 2014 at 3:45 PM, Tobias Soloschenko <
tobiassolosche...@googlemail.com> wrote:

> And thats the question I was looking for - how do I get the current page id
> within the class that generates the url which is no component and the
> second question was how do I get the page to that id, because (Page)
> WebSession.get().getPageManager().getPage(i.get()) returns null for int i
> 0-10, event if I cleared the browsers cache / restarted the server.
>
> kind regards and big thanks for all the help!
>
> Tobias
>
> 2014-09-09 14:28 GMT+02:00 Martin Grigorov <mgrigo...@apache.org>:
>
> > Session#pageId is a counter that is used to give an id to the next
> created
> > page.
> > It is not the id of the currently used page!
> >
> > You will need to provide the pageId somehow to the class that generates
> the
> > url.
> >
> > Martin Grigorov
> > Wicket Training and Consulting
> > https://twitter.com/mtgrigorov
> >
> >
> > On Tue, Sep 9, 2014 at 3:13 PM, Tobias Soloschenko <
> > tobiassolosche...@googlemail.com> wrote:
> >
> > > The method getPage() is not available at the place where I'm building
> the
> > > link - I'm not within a component and I try to get the page by content
> of
> > > the session. :-)
> > >
> > > I didn't modified the Session - the pageId is stored in
> > > org.apache.wicket.Session.pageId which is an AtomicInteger
> > >
> > >
> > > 2014-09-09 14:06 GMT+02:00 Martin Grigorov <mgrigo...@apache.org>:
> > >
> > > > Pass the pageId as a query string parameter.
> > > >
> > > > PageParameters params = new PageParameters();
> > > > params.set("pageId", getPage().getPageId());
> > > > theUrlToTheReference = requestCycle.urlFor(yourResRef, params);
> > > >
> > > > Then in the IResource (better extend AbstractResource) just read it
> > from
> > > > the request parameters.
> > > >
> > > > Storing the pageId in the session is not OK because the user may open
> > two
> > > > different pages in separate tabs/windows and this will break.
> > > >
> > > >
> > > > Martin Grigorov
> > > > Wicket Training and Consulting
> > > > https://twitter.com/mtgrigorov
> > > >
> > > >
> > > > On Tue, Sep 9, 2014 at 3:01 PM, Tobias Soloschenko <
> > > > tobiassolosche...@googlemail.com> wrote:
> > > >
> > > > > Thanks again for the fast answer. My code now looks this way:
> > > > >
> > > > >             Field declaredField =
> > > > > WebSession.get().getClass().getSuperclass()
> > > > >                 .getDeclaredField("pageId");
> > > > >
> > > > >             declaredField.setAccessible(true);
> > > > >             AtomicInteger i = (AtomicInteger)
> > > > > declaredField.get(WebSession.get());
> > > > >             Page page = (Page) WebSession.get().getPageManager()
> > > > >                 .getPage(i.get());
> > > > >
> > > > >             AjaxRequestTarget newAjaxRequestTarget =
> > ((WebApplication)
> > > > > Application.get())
> > > > >                 .newAjaxRequestTarget(page);
> > > > >
> > > > >             RequestCycle.get().scheduleRequestHandlerAfterCurrent(
> > > > >                 newAjaxRequestTarget);
> > > > >
> > > > > I dont know how to get the current pageId but from the Session. The
> > > page
> > > > at
> > > > > this place is null. :-(
> > > > >
> > > > >
> > > > >
> > > > > 2014-09-09 13:53 GMT+02:00 Martin Grigorov <mgrigo...@apache.org>:
> > > > >
> > > > > > On Tue, Sep 9, 2014 at 2:05 PM, Tobias Soloschenko <
> > > > > > tobiassolosche...@googlemail.com> wrote:
> > > > > >
> > > > > > > Hi again,
> > > > > > >
> > > > > > > I tried out that code you mentioned here.
> > > > > > > WebSession.get().getPageManager().getPage(int i) returns
> > > > > IManageablePage
> > > > > > > which is not applicable as argument for newAjaxRequestTarget.
> > > > > > >
> > > > > >
> > > > > > cast it
> > > > > > it is known that in your environment you don't use any custom
> > > > > > IManageablePage/IRequestablePage impls (see IPageFactory)
> > > > > >
> > > > > >
> > > > > > >
> > > > > > > The second thing is how do I get the instance of a page by
> class
> > > with
> > > > > the
> > > > > > > last page id not from within a component (this would be simple
> > > > > > getPage())?
> > > > > > >
> > > > > >
> > > > > > I didn't get this
> > > > > > Please re-phrase
> > > > > >
> > > > > >
> > > > > > >
> > > > > > > 2014-09-09 11:51 GMT+02:00 Martin Grigorov <
> mgrigo...@apache.org
> > >:
> > > > > > >
> > > > > > > > I've re-read the message and I think I got it.
> > > > > > > > What you really need is a mounted resource
> > > > > > > > (WebApplication#mountResource(someResourceReference))
> > > > > > > > To get a url to it use: theUrl =
> > requestCycle.urlFor(sameResRef,
> > > > > > > > parametersWithPageId)
> > > > > > > > Wicket.Ajax.get({"u": theUrl, ...})
> > > > > > > > In IResource#respond() you can create AjaxRequestTarget with:
> > > > > > > >
> > > > > > > > Page page =
> > > session.getPageManager().get(parameters.get("pageId"))
> > > > > > > > target = webApplication.newAjaxRequestTarget(page)
> > > > > > > > requestCycle.scheduleRequestHandlerAfterCurrent(target);
> > > > > > > > page.send(page, Broadcast.BREADTH, new SomeEvent(target))
> > > > > > > >
> > > > > > > > in SomeComponent#onEvent() use
> someEvent.getTarget().add(this)
> > to
> > > > add
> > > > > > the
> > > > > > > > component when SomeEvent is broadcasted
> > > > > > > >
> > > > > > > > Martin Grigorov
> > > > > > > > Wicket Training and Consulting
> > > > > > > > https://twitter.com/mtgrigorov
> > > > > > > >
> > > > > > > >
> > > > > > > > On Tue, Sep 9, 2014 at 12:40 PM, Richter, Marvin <
> > > > > > > > marvin.rich...@freenetdigital.com> wrote:
> > > > > > > >
> > > > > > > > > What you are looking for is the Wicket Event mechanism.
> > > > > > > > >
> > > > > > > > > This allows you to send a broadcast to a specified
> Component
> > > > (e.g.
> > > > > > the
> > > > > > > > > current page) and a payload (e.g. your custom event type
> > which
> > > > > > contains
> > > > > > > > > information).
> > > > > > > > >
> > > > > > > > > In the Components which should react on the event you
> > override
> > > > the
> > > > > > > method
> > > > > > > > > onEvent, check if the event is of your type and if so, do
> > with
> > > > the
> > > > > > > event
> > > > > > > > > payload whatever you want.
> > > > > > > > >
> > > > > > > > > Check out
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> http://www.wicket-library.com/wicket-examples/events/wicket/bookmarkable/org.apache.wicket.examples.source.SourcesPage?1&SourcesPage_class=org.apache.wicket.examples.events.DecoupledAjaxUpdatePage
> > > > > > > > > for a good example.
> > > > > > > > >
> > > > > > > > > Best,
> > > > > > > > > Marvin
> > > > > > > > >
> > > > > > > > > -----Original Message-----
> > > > > > > > > From: Tobias Soloschenko [mailto:
> > > > tobiassolosche...@googlemail.com]
> > > > > > > > > Sent: Tuesday, September 09, 2014 11:31 AM
> > > > > > > > > To: users@wicket.apache.org
> > > > > > > > > Subject: Re: Global Ajax Event Handler
> > > > > > > > >
> > > > > > > > > Hi,
> > > > > > > > >
> > > > > > > > > thanks for the answer, but this is only a client side event
> > > hook
> > > > > not
> > > > > > > for
> > > > > > > > > processing a request to the Server. I added a pseudo code
> to
> > > the
> > > > > > > question
> > > > > > > > > of martin who asked me what I exactly want to do.
> > > > > > > > >
> > > > > > > > > Thanks anyway for the fast answer!
> > > > > > > > >
> > > > > > > > > kind regards,
> > > > > > > > >
> > > > > > > > > Tobias
> > > > > > > > >
> > > > > > > > > > Am 09.09.2014 um 11:06 schrieb Tom Götz <t...@decoded.de
> >:
> > > > > > > > > >
> > > > > > > > > > See
> > > > > https://cwiki.apache.org/confluence/display/WICKET/Wicket+Ajax
> > > > > > ,
> > > > > > > > > section "Global Ajax call listeners“.
> > > > > > > > > >
> > > > > > > > > > Cheers,
> > > > > > > > > >   -Tom
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >> On 09.09.2014, at 10:58, Tobias Soloschenko <
> > > > > > > > > tobiassolosche...@googlemail.com> wrote:
> > > > > > > > > >>
> > > > > > > > > >> Hi all,
> > > > > > > > > >>
> > > > > > > > > >> is there a way to register a global ajax event handler
> > > within
> > > > > > > Wicket?
> > > > > > > > > For normal there is the AbstractDefaultAjaxBehavior which
> is
> > > > added
> > > > > > to a
> > > > > > > > > component. And then the CallbackScript can be obtained and
> > used
> > > > > > within
> > > > > > > a
> > > > > > > > > OnDomReadyHeaderItem for example.
> > > > > > > > > >>
> > > > > > > > > >> Is there a way to do this on application level so that
> Im
> > > able
> > > > > to
> > > > > > > get
> > > > > > > > > the CallbackScript from the instantiated Application?
> > > > > > > > > >>
> > > > > > > > > >> kind regards
> > > > > > > > > >>
> > > > > > > > > >> Tobias
> > > > > > > > > >>
> > > > > > >
> > > ---------------------------------------------------------------------
> > > > > > > > > >> To unsubscribe, e-mail:
> > users-unsubscr...@wicket.apache.org
> > > > > > > > > >> For additional commands, e-mail:
> > > users-h...@wicket.apache.org
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > >
> ---------------------------------------------------------------------
> > > > > > > > > To unsubscribe, e-mail:
> users-unsubscr...@wicket.apache.org
> > > > > > > > > For additional commands, e-mail:
> > users-h...@wicket.apache.org
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to