I must have been sleeping earlier, because I figured that (in your example) 
getTheLink() had to be called multiple times, instead of onMyAction()..

That solves a few things, now there's no need for a submit anymore, thanks!
Geert-Jan


HugoPalma wrote:
> 
> The example i provided fires the call to the server whenever the 
> javascript function is called.
> So, if you call the function from an onchange event on a select the 
> method will be called every time you change the selectbox.
> 
> <select onchange="sendRequest()" ...>
> ....
> </select>
> 
> Britske wrote:
>> Yeah i see/know, but for the discussion say that I want AJAX to change a
>> portion of the page every time a onChange-event fires (the server-side
>> method CallWhenOnChangeIsFired() should be called through AJAX whenever
>> this
>> happens ans this method changes sets the necessary fields / performs a
>> search, etc. )
>>
>> The example you provided in the example only fires once  but I need it to
>> fire every time a onChange happens. How to do this? 
>>
>> Thanks in advance, 
>> Geert-Jan
>>  
>>
>>
>> HugoPalma wrote:
>>   
>>> The method i suggested is implemented so that you don't have to submit 
>>> the form. That's what AJAX is all about, you make a request to the 
>>> server and then update a portion of your page based on the response from 
>>> the server using javascript. There's no page reload of for submission.
>>>
>>> Britske wrote:
>>>     
>>>> yeah indeed it is only called once when the template is rendered, I
>>>> discovered now. 
>>>> However i don't need to return a dynamic url or whatever based on the
>>>> getTheLink-method. 
>>>>
>>>> what I need is a way to reliably catch a event at the server/java side
>>>> (in
>>>> this case onChange) every time that event occurs. I don't want to
>>>> submit
>>>> my
>>>> form when that happens (otherwise I could use the method you suggested)
>>>> but
>>>> I want to update some information on the current page and stay there. 
>>>>
>>>> This means that i have to redirect to my currentpage with a couple of
>>>> queryparameters in the url which depend on the selected fields in the
>>>> form. 
>>>>
>>>> hmm, the more i think about it, I don't think i really need to catch
>>>> the
>>>> event server-side. I just redirect to the current page on onChange
>>>> using
>>>> javascript:window.location=... and parse the querystrings correctly in
>>>> it. 
>>>>
>>>> hope this makes sense, 
>>>> thanks!
>>>> Geert-Jan
>>>>
>>>>
>>>>
>>>> HugoPalma wrote:
>>>>   
>>>>       
>>>>> That's the way it's supposed to be.
>>>>> You only see the getTheLink method executed once because that what it 
>>>>> need to replace ${theLink} in your template with the correct link that 
>>>>> is returned from your method. This is done once when the page renders. 
>>>>> If you look at the rendered page source you won't see ${theLink}
>>>>> there, 
>>>>> instead you will the the generated link to your listener.
>>>>>
>>>>> Anyway, does it really matter how many times the getTheLink method is 
>>>>> invoked ? I think not.  What really matters is that the listener
>>>>> method 
>>>>> to which your getTheLink method should be returning the URL to is
>>>>> called 
>>>>> whenever you call the "sendRequest" function.
>>>>>
>>>>>
>>>>> Britske wrote:
>>>>>     
>>>>>         
>>>>>> thanks that works partially. 
>>>>>>
>>>>>> However, the event is only catched twice: 
>>>>>> 1. on pageload (??m the sendRequest isn't called, but somehow the
>>>>>> getTheLink()-method is executed.)
>>>>>> 2. the first time i send a onchange. 
>>>>>>
>>>>>> However after the first onchange all other onchange-event don't get
>>>>>> getTheLink() executed, although sendRequest() is called on the
>>>>>> client-side
>>>>>> each time. 
>>>>>>
>>>>>> This is my relevant code: 
>>>>>>
>>>>>> in  html: 
>>>>>> <script>
>>>>>> function sendRequest() 
>>>>>>     {
>>>>>>          alert("sendRequest reached");
>>>>>>          new Ajax.Request('${theLink}',
>>>>>> {asynchronous:true,onSuccess:handleResponse});
>>>>>>     } 
>>>>>> </script>
>>>>>> ...
>>>>>> <select t:type="select" t:model="themaList" t:value="thema"
>>>>>> onchange="sendRequest()" name="thema" id="thema" tabindex="4" 
>>>>>> class="formElement"/>
>>>>>>
>>>>>> in the page-class: 
>>>>>>  public String getTheLink() 
>>>>>>  {
>>>>>>          System.out.println("catched!!");
>>>>>>          return "catched!";
>>>>>>  } 
>>>>>>
>>>>>> Do you 've got any idea what causes this behavior? 
>>>>>>
>>>>>> Thanks,
>>>>>> Geert-Jan
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> HugoPalma wrote:
>>>>>>   
>>>>>>       
>>>>>>           
>>>>>>> I would suggest that you use AJAX instead of doing the form submit. 
>>>>>>> Although the AJAX integration in T5 is still not implemented it's
>>>>>>> very 
>>>>>>> easy to do using the provided prototype and json javascripts. I did
>>>>>>> this 
>>>>>>> successfully for some simple events also.
>>>>>>> Shortly, here's how i did it:
>>>>>>>
>>>>>>> In my page i have these two javascript functions:
>>>>>>>
>>>>>>> function handleResponse(xhrResponse) {
>>>>>>>         var json = xhrResponse.responseText.evalJSON(true);
>>>>>>>
>>>>>>>         //Do whatever you want with the server response
>>>>>>>     }
>>>>>>>     // -->
>>>>>>>
>>>>>>>     function sendRequest() {
>>>>>>>             new Ajax.Request('${theLink}', {asynchronous:true, 
>>>>>>> onSuccess:handleResponse});
>>>>>>>     }
>>>>>>>
>>>>>>> On the page class i have:
>>>>>>>
>>>>>>> public String getTheLink() {
>>>>>>>         Link l = _resources.createActionLink("myAction", false);
>>>>>>>         return l.toURI();
>>>>>>>     }
>>>>>>>
>>>>>>> public StreamResponse onMyAction() {
>>>>>>>         Collection<Casta> castas =
>>>>>>> _regiaoDao.getRegiao(regiao).getCastas();
>>>>>>>
>>>>>>>         JSONObject jsonObject = new JSONObject();
>>>>>>>           // Add whatever info you want to send to the client
>>>>>>>
>>>>>>>         return new TextStreamResponse("text/xml",
>>>>>>> jsonObject.toString());
>>>>>>>     }
>>>>>>>
>>>>>>> And that's it. Works great. All you have to do now is call the 
>>>>>>> sendRequest function from whatever javascript event you want to
>>>>>>> catch.
>>>>>>> Hope this helps.
>>>>>>>
>>>>>>> Britske wrote:
>>>>>>>     
>>>>>>>         
>>>>>>>             
>>>>>>>> I have a use-case in which i need to catch a onchange of of
>>>>>>>> select-component
>>>>>>>> on the server-side. 
>>>>>>>> The only way I know how to do that is do a javascript
>>>>>>>> onchange='this.form.submit()' and catch the onsubmit() event on the
>>>>>>>> serverside.
>>>>>>>>
>>>>>>>> This works well when i don't have a submit-component in the form as
>>>>>>>> well. 
>>>>>>>> However, when I do have a submit the onchange doesn't give a
>>>>>>>> onsubmit()
>>>>>>>> on
>>>>>>>> the serverside anymore. 
>>>>>>>>
>>>>>>>> So, the onchange in the following snippet doesn't give a server
>>>>>>>> side
>>>>>>>> onsubmit()-event:
>>>>>>>>
>>>>>>>> <body>
>>>>>>>> <form t:type="form" t:id="form" id="form">
>>>>>>>>        <select t:type="select" t:model="countryList" t:value="country"
>>>>>>>> onchange="this.form.submit();"/>
>>>>>>>>     <input t:type="Submit" value="All results"/>
>>>>>>>> </form>
>>>>>>>> </body>
>>>>>>>>
>>>>>>>> However, the following does:
>>>>>>>>
>>>>>>>> <body>
>>>>>>>> <form t:type="form" t:id="form" id="form">
>>>>>>>>        <select t:type="select" t:model="countryList" t:value="country"
>>>>>>>> onchange="this.form.submit();"/>
>>>>>>>>     <!--<input t:type="Submit" value="All results"/>-->
>>>>>>>> </form>
>>>>>>>> </body>
>>>>>>>>
>>>>>>>> This isn't expected behavior since both examples do work with plain
>>>>>>>> html
>>>>>>>> form elements. 
>>>>>>>> anyone?
>>>>>>>>
>>>>>>>> Geert-Jan
>>>>>>>>   
>>>>>>>>       
>>>>>>>>           
>>>>>>>>               
>>>>>>>     
>>>>>>>         
>>>>>>>             
>>>>>>   
>>>>>>       
>>>>>>           
>>>>>     
>>>>>         
>>>>   
>>>>       
>>>     
>>
>>   
> 
> 

-- 
View this message in context: 
http://www.nabble.com/t5-form-submit-not-fired-tf4645307.html#a13279966
Sent from the Tapestry - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to