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=\&quot;group/show\&quot;
> >>>>>> context=\&quot;&quot; + group['id'] +
> >>>>>> &quot;\&quot;>link</t:pagelink>"  var link = "<a
> >>>>>> t:type=\&quot;pagelink\&quot; href=\&quot;show/&quot; + +
> >>>>>> group['id'] +   &quot;\&quot;
> >>>>>> t:page=\&quot;group/show\&quot; t:context=&quot; +
> >>>>>> group['id'] + &quot;>"+ 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.

Reply via email to