Hi Arno! Thank you for your help. The main questions I have is:
1. What is the difference between a zone and a block?! The docs are (in my opinion not clear) 2. What do I need to update a specific element as shown in my example? My Javascript is updating the java-method, and within the java method I want to force a partial update of my TML. thx... 2012/6/3 Arno Haase [via Tapestry] < ml-node+s1045711n5713590...@n5.nabble.com> > -----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: [hidden > email]<http://user/SendEmail.jtp?type=node&node=5713590&i=0> > > For additional commands, e-mail: [hidden > > email]<http://user/SendEmail.jtp?type=node&node=5713590&i=1> > > > > > -----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: [hidden > email]<http://user/SendEmail.jtp?type=node&node=5713590&i=2> > For additional commands, e-mail: [hidden > email]<http://user/SendEmail.jtp?type=node&node=5713590&i=3> > > > > ------------------------------ > If you reply to this email, your message will be added to the discussion > below: > > http://tapestry.1045711.n5.nabble.com/javascript-and-tapestry-reloading-a-list-tp5713535p5713590.html > To unsubscribe from javascript and tapestry - reloading a list, click > here<http://tapestry.1045711.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=5713535&code=YWxleGFuZGVyLnNvbW1lckBnbWFpbC5jb218NTcxMzUzNXwxMDUzMzQxMzM4> > . > NAML<http://tapestry.1045711.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> > -- View this message in context: http://tapestry.1045711.n5.nabble.com/javascript-and-tapestry-reloading-a-list-tp5713535p5713594.html Sent from the Tapestry - User mailing list archive at Nabble.com.