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]