ok that explains a few things ;-) thanks for clearing that up. Nick Westgate wrote: > > Hugo defined myAction as returning a StreamResponse -> no redirect. > Geert-Jan says myAction returns void -> a redirect occurs. > > Cheers, > Nick. > > > Hugo Palma wrote: >> If your getting a page redirect then your doing something wrong in your >> code. >> If you post it i can try and find the problem. >> >> Britske wrote: >>> 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 >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >>> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > >
-- View this message in context: http://www.nabble.com/t5-form-submit-not-fired-tf4645307.html#a13289159 Sent from the Tapestry - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]