after the onchange occurs, this is what happens in my app: 

1. onMyAction is executed()  (this is an actionlink which returns nothing
(void) which results in a client-side redirect to the same page 
(as per documentation:
http://tapestry.apache.org/tapestry5/tapestry-core/guide/pagenav.html )

2. onActivate() is executed on the server, which I think proofs that there
was indeed a redirect. 

please don't get me wrong, I still think it's an elegant solution...

//Geert-Jan


HugoPalma wrote:
> 
> Why do you say a redirect happens ? Does your page refresh when you 
> change the selectbox value ?
> It won't refresh because all your doing is call a javascript function. 
> There's no redirect.
> 
> Britske wrote:
>> since your example effectively calls a ActionLink through AJAX, a
>> redirect
>> DOES happen. It's the result of the ActionLink. If I'm seeing this
>> correctly
>> what then is the advantage of doing a call through AJAX or a
>> form.submit()
>> for the discussed purpose, since both result in a redirect?
>>
>> //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#a13283671
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