You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Tron Walseth <tr...@telespor.no> on 2013/03/05 11:23:36 UTC

Strange wicket ajax behavior

Hi all, 

I am using wicket-openlayers to produce maps. This works (mostly) like a charm. 

Now I have a problem, I want to get the map extent serverside, in order to produce a list of features within the bounds of the map. In order to get this, I need to get the map extent when the link is clicked, and therefore (afaik) I have to use Ajax. 

When the map page is loaded, I register an event listener to the link as follows (js): 

	this.addExternalClickListener = function(component, callback) {
		var self = this;
		Wicket.Event.add(component, 'click', function(event) {
			if (event.type == 'click') {
				self.onEvent(callback, {});
			}				
		});
	};

The onEvent method looks like this:
	this.onEvent = function (callBack, params) {
		params["center"] = this.map.getCenter();
		params["bounds"] = this.map.getExtent();
		params["zoom"] = this.map.getZoomForExtent(this.map.getExtent(), false);
		Wicket.Ajax.get({"u":callBack, "ep":params});
	};

This method (onEvent) is tested and is working for another feature. 
The component is calculated as follows serverside in a subclass of AbstractDefaultAjaxBehavior: getComponent().getMarkupId(), and the callback is computed using getCallbackUrl() in the same class. 

When this is debugged using Firebug, all looks fine and dandy, the event is added, and the extra parameters are computed correctly, as far as I can see. 

Then the erratic behavior starts: First time the Wicket.ajax.get is called, the page is reloaded, and all subsequent calls return the html for the map page.  

Any help is much appreciated!

Yours, 
Tron Walseth


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


SV: Strange wicket ajax behavior

Posted by Tron Walseth <tr...@telespor.no>.
Hi

Personally, I vote for alternative 3 :-)

the link is not an ajax link, but a normal link. this is because a new popup is needed, and the AjaxLink class doesn't have popup fuctionality, but the normal link has. 

Is it a problem to have an empty onClick-method on a normal link, and add an ajax behavior to the link, where all logic is executed?

Tron
________________________________________
Fra: Martin Grigorov [mgrigorov@apache.org]
Sendt: 5. mars 2013 11:41
Til: users@wicket.apache.org
Emne: Re: Strange wicket ajax behavior

Hi,

I see three options:
1) the Ajax request calls
AbstractDefaultAjaxBehavior#respond(AjaxRequestTarget)
and there the page is added for repaint.
2) the page is either expired (or even not stored at all, check the server
logs for any exceptions) and the Ajax call cannot find the page and the
component with the Ajax behavior
If IPageSettings#getRecreatePageAfterExpiry() is true then a new page
instance will be created and rendered
3) the page instance has been re-rendered in a different tab/window and any
request from the first tab/window will lead to PageStaleException (see
PageProvider#getPageInstance() and the check for renderCount in it)


On Tue, Mar 5, 2013 at 12:23 PM, Tron Walseth <tr...@telespor.no> wrote:

> Hi all,
>
> I am using wicket-openlayers to produce maps. This works (mostly) like a
> charm.
>
> Now I have a problem, I want to get the map extent serverside, in order to
> produce a list of features within the bounds of the map. In order to get
> this, I need to get the map extent when the link is clicked, and therefore
> (afaik) I have to use Ajax.
>
> When the map page is loaded, I register an event listener to the link as
> follows (js):
>
>         this.addExternalClickListener = function(component, callback) {
>                 var self = this;
>                 Wicket.Event.add(component, 'click', function(event) {
>                         if (event.type == 'click') {
>                                 self.onEvent(callback, {});
>                         }
>                 });
>         };
>
> The onEvent method looks like this:
>         this.onEvent = function (callBack, params) {
>                 params["center"] = this.map.getCenter();
>                 params["bounds"] = this.map.getExtent();
>                 params["zoom"] =
> this.map.getZoomForExtent(this.map.getExtent(), false);
>                 Wicket.Ajax.get({"u":callBack, "ep":params});
>         };
>
> This method (onEvent) is tested and is working for another feature.
> The component is calculated as follows serverside in a subclass of
> AbstractDefaultAjaxBehavior: getComponent().getMarkupId(), and the callback
> is computed using getCallbackUrl() in the same class.
>
> When this is debugged using Firebug, all looks fine and dandy, the event
> is added, and the extra parameters are computed correctly, as far as I can
> see.
>
> Then the erratic behavior starts: First time the Wicket.ajax.get is
> called, the page is reloaded, and all subsequent calls return the html for
> the map page.
>
> Any help is much appreciated!
>
> Yours,
> Tron Walseth
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>


--
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Strange wicket ajax behavior

Posted by Martin Grigorov <mg...@apache.org>.
Hi,

I see three options:
1) the Ajax request calls
AbstractDefaultAjaxBehavior#respond(AjaxRequestTarget)
and there the page is added for repaint.
2) the page is either expired (or even not stored at all, check the server
logs for any exceptions) and the Ajax call cannot find the page and the
component with the Ajax behavior
If IPageSettings#getRecreatePageAfterExpiry() is true then a new page
instance will be created and rendered
3) the page instance has been re-rendered in a different tab/window and any
request from the first tab/window will lead to PageStaleException (see
PageProvider#getPageInstance() and the check for renderCount in it)


On Tue, Mar 5, 2013 at 12:23 PM, Tron Walseth <tr...@telespor.no> wrote:

> Hi all,
>
> I am using wicket-openlayers to produce maps. This works (mostly) like a
> charm.
>
> Now I have a problem, I want to get the map extent serverside, in order to
> produce a list of features within the bounds of the map. In order to get
> this, I need to get the map extent when the link is clicked, and therefore
> (afaik) I have to use Ajax.
>
> When the map page is loaded, I register an event listener to the link as
> follows (js):
>
>         this.addExternalClickListener = function(component, callback) {
>                 var self = this;
>                 Wicket.Event.add(component, 'click', function(event) {
>                         if (event.type == 'click') {
>                                 self.onEvent(callback, {});
>                         }
>                 });
>         };
>
> The onEvent method looks like this:
>         this.onEvent = function (callBack, params) {
>                 params["center"] = this.map.getCenter();
>                 params["bounds"] = this.map.getExtent();
>                 params["zoom"] =
> this.map.getZoomForExtent(this.map.getExtent(), false);
>                 Wicket.Ajax.get({"u":callBack, "ep":params});
>         };
>
> This method (onEvent) is tested and is working for another feature.
> The component is calculated as follows serverside in a subclass of
> AbstractDefaultAjaxBehavior: getComponent().getMarkupId(), and the callback
> is computed using getCallbackUrl() in the same class.
>
> When this is debugged using Firebug, all looks fine and dandy, the event
> is added, and the extra parameters are computed correctly, as far as I can
> see.
>
> Then the erratic behavior starts: First time the Wicket.ajax.get is
> called, the page is reloaded, and all subsequent calls return the html for
> the map page.
>
> Any help is much appreciated!
>
> Yours,
> Tron Walseth
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>


-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>