thank you very much, i will try that example and give feedback asap. thank you all!
2012/6/4 Geoff Callender-2 [via Tapestry] < ml-node+s1045711n5713603...@n5.nabble.com> > See if this running example helps. > > > http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/periodicupdate > > Cheers, > > Geoff > > On 04/06/2012, at 3:30 PM, sommeralex wrote: > > > Hi Arno, > > > > Thx for your help again! > > > > The javascript function is drawGroups is called and my alert('ok') > appears, > > but > > > > If i am returning zone.getBody(), then i am still getting this response: > > > > 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 > > > > 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.airwriting.domain.GeoPoint; > > import com.airwriting.domain.Group; > > import com.airwriting.service.GeometryService; > > import com.airwriting.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 Object 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); > > return zone.getBody(); > > } > > > > } > > > > > > TML > > > > <t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_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"> > > ${curGroup.name} > > </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'] +"</a>"; > > > > > > > > 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"); > > } > > > > > > > > > > > > 2012/6/3 Arno Haase [via Tapestry] < > > [hidden email] <http://user/SendEmail.jtp?type=node&node=5713603&i=0>> > > > >> -----BEGIN PGP SIGNED MESSAGE----- > >> Hash: SHA1 > >> > >>> 1. What is the difference between a zone and a block?! The docs are > >>> (in my opinion not clear) > >> > >> A Zone is basically an HTML <div> with support for replacing its > >> children via AJAX. It is a Tapestry component, and it is actually > >> rendered in the browser. > >> > >> A Block on the other hand is something like a named repository for > >> stuff that can be partially rendered. It is not a Tapestry component, > >> and it does not generate HTML when its parent in the .tml file is > >> rendered. Its purpose is to provide a handle to a chunk of code - one > >> prominent example being an AJAX update of a Zone. > >> > >>> 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. > >> > >> The way that Tapestry supports this best is to wrap the to-be-updated > >> element in a <t:Zone>, call an event handler (e.g. via the JS I sent > >> you) and have the event handler return a block. > >> > >> You can return an arbitrary block, which causes Tapestry to replace > >> the children of the <div> element corresponding to the Zone with > >> arbitrary code. For the simple case that you just want to re-render > >> the same markup, you can @InjectComponent the zone and return > >> zone.getBody(): > >> > >> > >> <t:Zone t:id="myZone"> > >> ... > >> </t:Zone> > >> > >> > >> @InjectComponent Zone myZone; > >> > >> > >> ... > >> > >> public Object onMyEvent() { > >> ... > >> return myZone.getBody(); > >> } > >> > >> > >> Hope this helps > >> > >> - - Arno > >> > >> > >>> > >>> thx... > >>> > >>> 2012/6/3 Arno Haase [via Tapestry] < > >>> [hidden email] <http://user/SendEmail.jtp?type=node&node=5713595&i=0>> > > >>> > >>> 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> > >>>>>> > >>>>>> > >>>> > >>>> --------------------------------------------------------------------- > >>>> > >>>> > >> 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< > >> > >>>> > >>>> > >> . > >>>> 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. > >> -----BEGIN PGP SIGNATURE----- > >> Version: GnuPG v1.4.11 (GNU/Linux) > >> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ > >> > >> iEYEARECAAYFAk/Ln9cACgkQbmZsMyUPuXTZTwCgtJ62sqJCrCo/byq5Expm6NGA > >> soUAoIVJJQcTg01unygTONTAM2YXEF+v > >> =Q3O2 > >> -----END PGP SIGNATURE----- > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [hidden email]< > http://user/SendEmail.jtp?type=node&node=5713595&i=1> > >> For additional commands, e-mail: [hidden email]< > http://user/SendEmail.jtp?type=node&node=5713595&i=2> > >> > >> > >> > >> ------------------------------ > >> 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-tp5713535p5713595.html > >> To unsubscribe from javascript and tapestry - reloading a list, click > >> here< > >> . > >> 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-tp5713535p5713600.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=5713603&i=1> > For additional commands, e-mail: [hidden > email]<http://user/SendEmail.jtp?type=node&node=5713603&i=2> > > > > ------------------------------ > 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-tp5713535p5713603.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-tp5713535p5713604.html Sent from the Tapestry - User mailing list archive at Nabble.com.