-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Been offline the last couple of days.
Your event handler returns a JSONArray which is probably not what you want. You wrote initially that you would like Tapestry to re-render your zone. The straight-forward way to do that is to put your rendering code in a <t:block> in your .tml, @Inject that block into your page class and return that block from your event handler. That causes Tapestry to render that block, send the resulting DOM part to the browser and replace the content of the Zone with it. So basically your event handler does not deal with JS / JSON directly any more but rather delegate the rendering to Tapestry. Hope that helps, otherwise keep asking ;-) - - Arno Am 31.05.2012 00:44, schrieb sommeralex: > Hi Arno, > > Thx for your your answer. If i am trying what you say, i get this > error message: > > Ajax failure: Status 500 for > /group/listlocalgroups:getgroupsonlocation: > org.apache.tapestry5.ioc.internal.OperationException Communication > with the server failed: > org.apache.tapestry5.ioc.internal.OperationException > > FULL CODE: > > package com.airwriting.frontend.pages.group; > > import java.util.List; > > > import org.apache.tapestry5.ComponentResources; import > org.apache.tapestry5.Link; import > org.apache.tapestry5.annotations.Import; import > org.apache.tapestry5.annotations.InjectComponent; import > org.apache.tapestry5.annotations.Property; import > org.apache.tapestry5.corelib.components.Zone; import > org.apache.tapestry5.ioc.annotations.Inject; import > org.apache.tapestry5.json.JSONArray; import > org.apache.tapestry5.json.JSONObject; import > org.apache.tapestry5.services.Request; import > org.apache.tapestry5.services.javascript.JavaScriptSupport; > > import com.myProj.domain.GeoPoint; import com.myProj.domain.Group; > import com.myProj.service.GeometryService; import > com.myProj.service.data.GroupService; import > com.vividsolutions.jts.geom.Geometry; > > @Import(library = { "context:js/browselocalgroups.js" }) public > class ListLocalGroups { @Inject private GroupService > groupService; @Inject private JavaScriptSupport jsSupport; @Inject > private Request request; @Inject private ComponentResources > componentResources; @Property private Geometry location; > @Property private List<Group> groups; @InjectComponent private > Zone zone; @SuppressWarnings("unused") @Property private Group > curGroup; public void setupRender() { Link linkGetGroupsOnLocation > = componentResources.createEventLink("getGroupsOnLocation"); > > jsSupport.addScript( "init('%s');", > linkGetGroupsOnLocation.toURI()); } public JSONArray > onGetGroupsOnLocation(){ Double lat = Double.parseDouble( > request.getParameter("lat") ); Double lng = Double.parseDouble( > request.getParameter("lng") ); Double radiusInMeters = > Double.parseDouble( request.getParameter("radius") ) / 2; Geometry > location = GeometryService.getPolygon(new GeoPoint(lat, lng), > radiusInMeters.intValue()); groups = > groupService.getGroupsOnLocation(location); JSONArray jsGroups = > new JSONArray(); for(Group group : groups){ JSONObject jsGroup = > group.toJSON(); jsGroup.put("lat", > group.getScope().getCentroid().getY()); jsGroup.put("lng", > group.getScope().getCentroid().getX()); jsGroups.put(jsGroup); } > return jsGroups; } } > > > TML > > <t:layout > xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> > > <div class ="map" id="map"></div> <t:googleMaps /> > > > <t:zone t:id="zone" id="zone"> <div id="zoneDiv"> <t:loop > source="groups" value="curGroup"> > > <div style="float:left"> test </div> </t:loop> </div> </t:zone> > </t:layout> > > JAVASCRIPT > > var urlGetGroupsOnLocation; var geocoder; > > > function init(url){ urlGetGroupsOnLocation = url; > > geocoder = new GClientGeocoder(); > > if (navigator.geolocation) { > navigator.geolocation.getCurrentPosition( function(position){ > updateLocation(position.coords.latitude, > position.coords.longitude); }, function(msg){ // error case: > nothing todo because we have already initialized the map } ); }else > { alert("no location"); } > > } > > function updateLocation(lat, lng){ onGetLatLng(new > GLatLng(lat,lng)); } > > function onGetLatLng(gLatLng){ > > if(gLatLng == null) { alert("Sorry, we couldn't find this > address."); return false; } alert ("ajax"); new > Ajax.Request(urlGetGroupsOnLocation, { onSuccess: drawGroups, > parameters: 'lat='+gLatLng.lat() + '&lng=' + gLatLng.lng() + > '&radius=' + 50000}); } > > function drawGroups(response){ alert ("draw"); var groupArray = > response.responseJSON; var list = "<ol>"; for (var i = 0; i < > groupArray .length; i++) { var group = groupArray [i]; > > // var link = "<t:pagelink page=\"group/show\" > context=\"" + group['id'] + > "\">link</t:pagelink>" var link = "<a > t:type=\"pagelink\" href=\"show/" + + > group['id'] + "\" t:page=\"group/show\" > t:context=" + group['id'] + ">"+ group['name'] +" "; > > list +="<li>"+link +"</li>"; > > > // If property names are known beforehand, you can also just do > e.g. // alert(object.id + ',' + object.Title); } > > //list +="</ol>"; > //document.getElementById("list").innerHTML=list; alert ("zone"); > var zoneObject=Tapestry.findZoneManagerForZone('zone'); > zoneObject.updateFromURL(urlGetGroupsOnLocation, {}); alert > ("ok"); } > > > > > > -- View this message in context: > http://tapestry.1045711.n5.nabble.com/javascript-and-tapestry-reloading-a-list-tp5713535p5713545.html > > Sent from the Tapestry - User mailing list archive at Nabble.com. > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > > -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk/LYNcACgkQbmZsMyUPuXRX8QCgkwAp0jH6BbRVKJSTuR9JpsdU tQMAni72QK29UOToFplkFU0hGMbHo0Rn =1nJo -----END PGP SIGNATURE----- --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org