If it's the javascript that's at fault one thing that may be causing
it is that I'm using Tapestry5-JQuery, which requires a different
syntax than prototype's 'observe' and 'click'.

I'm still trying to figure this out--obviously I'm not a JS expert yet.

On Tue, Jul 16, 2013 at 1:11 PM, Daniel Jue <teamp...@gmail.com> wrote:
> Thiago, thanks.  I feel that is very close to working.  I've tried out
> that example in a few ways and I still have some issues:
> Without anything in the TML, there is nothing to click on, so I tried
> adding an event link in the tml, like this
>
>
> <a t:type="eventlink" t:event='myCustomEventName' t:id='linkId' id='linkId'>
> Click this
> link to
> generate SUCCESS!
> </a>
>
> In the code you provided, when onMyCustomEventName() is called, there
> is no differentiation that it is an XHR call or not.  That's fine but
> when onMyCustomEventName() returns the JSON, I get
>
> An unexpected application exception has occurred.
> A component event handler method returned the value { "message" :
> "This is the message:SUCCESS" }. Return type
> org.apache.tapestry5.json.JSONObject can not be handled.
>
> The javascript for setupEvent() seems to be initializing ok, in my
> page it's this:
>
> <script type="text/javascript">var $ = jQuery; Tapestry.JQUERY=true;
> Tapestry.onDOMLoaded(function() {
> setupEvent('linkId', /newajax:mycustomeventname);
> });
> </script>
>
>
> So it seems like the javascript itself is not catching the response.
> Is it a problem that there is a ':' in the response url?
> (newajax:mycustomeventname)
>
>
> On Tue, Jul 16, 2013 at 8:58 AM, Thiago H de Paula Figueiredo
> <thiag...@gmail.com> wrote:
>> You don't need Zone nor EventLink for that, so don't use them. Here's
>> another way (not tested):
>>
>> @Inject
>> private ComponentResources resources;
>>
>> @Inject
>> private Request request;
>>
>> @Inject
>> private JavaScriptSupport javaScriptSupport;
>>
>> public String getEventLink() {
>>         return resources.createEventLink("MyCustomEventName");
>> }
>>
>> void afterRender() {
>>         javaScriptSupport.addScript("setupEvent('%s', %s);", "linkId",
>> getEventLink());
>> }
>>
>> JSONObject onMyCustomEventName() {
>>         String queryParameter1 = request.getParameter("queryParameter1");
>>         String queryParameter2 = request.getParameter("queryParameter2");
>>         JSONObject object = new JSONObject();
>>         object.put("message", getMessage());
>>         (...)
>>         return object;
>> }
>>
>> function setupEvent(id, url) {
>>         $(id).observe("click", function(event) {
>>                 new Ajax.Request(url, {
>>                         onSuccess: function(response) {
>>                                 var returnedObject = response.responseJSON;
>>                                 window.alert(returnedObject);
>>                         },
>>                         parameters : {
>>                                 queryParameter1: 'valueOfqueryParameter1',
>>                                 queryParameter2: 'valueOfqueryParameter2',
>>                         }
>>                 )};
>>         });
>>
>> }
>>
>>
>> On Tue, 16 Jul 2013 02:13:51 -0300, Daniel Jue <teamp...@gmail.com> wrote:
>>
>>> Ugh, still not working for me yet.  Once I get it though, things should
>>> really get moving.
>>> Here's what I have.  The intent is a simple event link on a page, that,
>>> when click on, performs an ajax call to get a json payload, and then
>>> displays the payload as the contents to a javascript alert().
>>> I figure from this simplified problem I can create real payloads and
>>> assign
>>> them to meaningful javascript variables.
>>>
>>> Something is obviously missing, but I'm at a loss for what.  This is
>>> probably my 20th iteration of it since the last email.  Of note is that in
>>> sendJson(), the request is NOT XHR, even though it's being called from an
>>> event link with a zone.
>>> Any ideas?  I'd really like to just get this working.  It seems like this
>>> would be a very common need, to provide json to js visualizations from
>>> pages without having to stand up separate REST services.  I poked around
>>> in
>>> tapestry5-jquery and tapestry5-highcharts, but didn't see an obvious
>>> example.
>>>
>>> NewAjax.java:
>>>
>>>
>>> @Import(library = "context:/js/testJSON.js")
>>> public class NewAjax {
>>> @Inject
>>> private AjaxResponseRenderer ajaxResponseRenderer;
>>>
>>> @Inject
>>> @Property
>>> private JavaScriptSupport javaScriptSupport;
>>> @Inject
>>> private ComponentResources resources;
>>>
>>> @InjectComponent
>>> private Zone someZone;
>>>
>>> @InjectComponent
>>> private EventLink jsonCallbackLink;
>>>
>>> @AfterRender
>>> private void addJavaScript() {
>>> javaScriptSupport.addInitializerCall("testJSON",
>>> jsonCallbackLink.getClientId());
>>> }
>>>
>>> @Inject
>>> private Request request;
>>>
>>> @OnEvent("sendJSON")
>>> void sendJSON() {
>>> if (request.isXHR()) {
>>> // use AjaxResponseRenderer
>>> ajaxResponseRenderer.addCallback(new JSONCallback() {
>>> public void run(JSONObject reply) {
>>> // generate my custom JSON payload here
>>> reply.put("message", "my message");
>>> }
>>> });
>>> }
>>> }
>>> }
>>>
>>>
>>>
>>> NewAjax.tml
>>>
>>> <html title="New Ajax" xmlns:t="
>>> http://tapestry.apache.org/schema/tapestry_5_3.xsd";
>>> xmlns:p="tapestry:parameter">
>>> <body>
>>> <t:zone t:id='someZone'>
>>> This is someZone
>>> </t:zone>
>>> <a t:type='eventLink' t:zone="someZone" t:id='jsonCallbackLink'
>>> t:event='sendJSON'>
>>> Click this link to generate JSON!
>>> </a>
>>> </body>
>>> </html>
>>>
>>>
>>> testJSON.js:
>>>
>>> Tapestry.Initializer.testJSON = function(elementId){
>>>     $(elementId).observe("click", function(event){
>>>
>>>         Tapestry.ajaxRequest($(elementId).href, function(response){
>>>             alert(response.responseJSON.message);
>>>         });
>>>
>>>         event.preventDefault();
>>>     });
>>> };
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Mon, Jul 15, 2013 at 9:08 PM, Taha Hafeez Siddiqi <
>>> tawus.tapes...@gmail.com> wrote:
>>>
>>>> EventLink must have its zone parameter set to a zone for it to use ajax.
>>>> Remember not to use an empty zone(because of a bug in 5.3). If you want
>>>> to
>>>> use an empty zone just add &nbsp; to it.
>>>>
>>>>
>>>> On 16-Jul-2013, at 6:30 AM, Daniel Jue <teamp...@gmail.com> wrote:
>>>>
>>>> > Thanks Taha and Howard!  Looks like I have some more learning to do,
>>>> which
>>>> > is always great.
>>>> > BTW, I'm on T5.3.6.
>>>> >
>>>> >
>>>> > Howard, for my purposes the JSON payload for the visualization needs to
>>>> be
>>>> > generated at runtime when the user clicks (I'll eventually have dozens
>>>> > of
>>>> > clickable links, each one a costly calculation)--your solution sounds
>>>> like
>>>> > the json is getting pre-calculated (unless I am interpreting it wrong,
>>>> > which is likely)
>>>> >
>>>> > I was trying one of Taha's old examples that seemed similar (
>>>> >
>>>>
>>>> http://apache-tapestry-mailing-list-archives.1045711.n5.nabble.com/Updating-a-page-with-a-JSONObject-td3339940.html
>>>> > )
>>>> > But I'm getting an error with that.  Possibly because I'm trying to
>>>> trigger
>>>> > the Ajax response through an eventlink I added to the TML, with no
>>>> > Zone.
>>>> > Do I need to make use of a zone component at all?  I'm getting an
>>>> > error of "Page
>>>> > must be specified before initializing for partial page render."
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > On Mon, Jul 15, 2013 at 7:30 PM, Howard Lewis Ship <hls...@gmail.com>
>>>> wrote:
>>>> >
>>>> >> Build a URL using resources.createEventLink() and pass this down to
>>>> >> the
>>>> >> browser.
>>>> >>
>>>> >> From the event handler, construct and return a JSONObject.
>>>> >>
>>>> >> Have the client trigger the provided URL, then pass the response.json
>>>> >> to
>>>> >> the fd.loadJSON() method.
>>>> >>
>>>> >> There's a bunch of other variations on this; for instance, you can
>>>> create a
>>>> >> initializer function (in 5.3) or a module (in 5.4) and pass the JSON
>>>> object
>>>> >> to the initalize function, or the module, via JavaScriptSupport.
>>>> >>
>>>> >>
>>>> >> On Mon, Jul 15, 2013 at 4:21 PM, Daniel Jue <teamp...@gmail.com>
>>>> >> wrote:
>>>> >>
>>>> >>> Hi, I'm getting back into Tapestry development, specifically needing
>>>> >>> to
>>>> >> do
>>>> >>> some dynamic front end work I haven't attempted before.
>>>> >>>
>>>> >>> I have a 3rd party JS library (Infovis) which draws a graph using
>>>> >>> JSON
>>>> >>> data.
>>>> >>>
>>>> >>>
>>>> >>
>>>>
>>>> http://philogb.github.io/jit/static/v20/Jit/Examples/ForceDirected/example1.html
>>>> >>>
>>>> >>> The starter example uses
>>>> >>>
>>>> >>> var json = "...the sample graph data.."
>>>> >>>
>>>> >>> and then later on there is call to
>>>> >>>
>>>> >>>   1. fd.loadJSON(json);
>>>> >>>
>>>> >>>
>>>> >>> What I'd like to do is have the user click on an action/event link
>>>> >>> and
>>>> >> then
>>>> >>> have the var json variable returned from the server side, and then
>>>> >>> have
>>>> >>> fd.loadJSON() called.
>>>> >>>
>>>> >>> What is the most direct and preferred way of doing this? (Preferably
>>>> >>> without extra dependencies)
>>>> >>>
>>>> >>>
>>>> >>> Thanks
>>>> >>>
>>>> >>
>>>> >>
>>>> >>
>>>> >> --
>>>> >> Howard M. Lewis Ship
>>>> >>
>>>> >> Creator of Apache Tapestry
>>>> >>
>>>> >> The source for Tapestry training, mentoring and support. Contact me to
>>>> >> learn how I can get you up and productive in Tapestry fast!
>>>> >>
>>>> >> (971) 678-5210
>>>> >> http://howardlewisship.com
>>>> >>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>>
>>>>
>>
>>
>> --
>> Thiago H. de Paula Figueiredo
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to