-----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] < > ml-node+s1045711n5713590...@n5.nabble.com> > > 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<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. -----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: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org