Re: redirect from ajax request
Actually its was pretty easy (like most things I try to do with tapestry) as soon as I understand the concept. Simply getting the current ComponentEventResultProcessor from the Environment, wrap it in case of exceptions and let it process the return-value. It is really as easy as this, EXCEPT you use the processor AND return a value after that. This way I managed it to have 2 json-objects in the response which made tapestry.js really mad =D {"redirectURL":"/TapTestReal/about"}{"content":"And another counter: 11"} public class Counter { @InjectComponent private Zone countzone; @Inject private ComponentResources componentResources; @Environmental private ComponentEventResultProcessor componentEventResultProcessor; @Property @Persist private int count; private Object fireValueChanged() throws IOException { ComponentResultProcessorWrapper callback = new ComponentResultProcessorWrapper(componentEventResultProcessor); componentResources.triggerEvent("valueChanged", new Object[]{new Integer(count)}, callback); if (!callback.isAborted()) { return countzone.getBody(); } return null; } public Object onUp() throws IOException { count++; return fireValueChanged(); } public Object onDown() throws IOException { count--; return fireValueChanged(); } public Object onReset() throws IOException { count = 0; return fireValueChanged(); } public String getZoneId(){ return countzone.getClientId(); //with this I can use this component multiple times on a single page even with ajax enabled } } I cutted some pieces of code which implement features not used in this context, hopefully it still compiles. That component can be used on a page like: Object onValueChangedFromEggCounter(int value){ if(value > 10) return ToMuchEggs.class; return null; } and everything works like expected (if counter reaches 11 you are redirected to another page). - Mario 2009/8/10 Howard Lewis Ship > To be specific, when during an Ajax request the component even returns > a page class or page instance, Tapestry builds and returns a Link as > part of the JSON response, the the client-side loads that Link's URL > into the browser address, performing a redirect. > > There are two implementations of ComponentEventResultProcessor, one > for @Traditional and one for @Ajax ... just bear that in mind if you > want to read the existing code, or extend the current behavior. They > are both based on a mapped configuration from return type to a > handler. > > On Sun, Aug 9, 2009 at 5:34 PM, Thiago H. de Paula > Figueiredo wrote: > > Em Sat, 08 Aug 2009 15:26:45 -0300, Mario Rabe < > mario.r...@googlemail.com> > > escreveu: > > > >> Hi, > > > > Hi! > > > >> how can I do a redirect from a XHR-request? Here an example to make > clear > >> what I want to do: > > > > If it was a Tapestry-provided event, you could just return a page > instance, > > a page class, an URL or a page name in an event handler method. > > Looking at the Form component sources, it uses this callback instance in > its > > VALIDATE_FORM event: > > > > ComponentResultProcessorWrapper callback = new > > ComponentResultProcessorWrapper(componentEventResultProcessor); > > > > componentEventResultProcessor comes from an environmental service: > > > > @Environmental > > private ComponentEventResultProcessor componentEventResultProcessor; > > > > Try using the above callback and please post the results. :) > > > > -- > > Thiago H. de Paula Figueiredo > > Independent Java consultant, developer, and instructor > > http://www.arsmachina.com.br/thiago > > > > - > > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > For additional commands, e-mail: users-h...@tapestry.apache.org > > > > > > > > -- > Howard M. Lewis Ship > > Creator of Apache Tapestry > Director of Open Source Technology at Formos > > - > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > >
Re: redirect from ajax request
To be specific, when during an Ajax request the component even returns a page class or page instance, Tapestry builds and returns a Link as part of the JSON response, the the client-side loads that Link's URL into the browser address, performing a redirect. There are two implementations of ComponentEventResultProcessor, one for @Traditional and one for @Ajax ... just bear that in mind if you want to read the existing code, or extend the current behavior. They are both based on a mapped configuration from return type to a handler. On Sun, Aug 9, 2009 at 5:34 PM, Thiago H. de Paula Figueiredo wrote: > Em Sat, 08 Aug 2009 15:26:45 -0300, Mario Rabe > escreveu: > >> Hi, > > Hi! > >> how can I do a redirect from a XHR-request? Here an example to make clear >> what I want to do: > > If it was a Tapestry-provided event, you could just return a page instance, > a page class, an URL or a page name in an event handler method. > Looking at the Form component sources, it uses this callback instance in its > VALIDATE_FORM event: > > ComponentResultProcessorWrapper callback = new > ComponentResultProcessorWrapper(componentEventResultProcessor); > > componentEventResultProcessor comes from an environmental service: > > @Environmental > private ComponentEventResultProcessor componentEventResultProcessor; > > Try using the above callback and please post the results. :) > > -- > Thiago H. de Paula Figueiredo > Independent Java consultant, developer, and instructor > http://www.arsmachina.com.br/thiago > > - > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > > -- Howard M. Lewis Ship Creator of Apache Tapestry Director of Open Source Technology at Formos - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: redirect from ajax request
Em Sat, 08 Aug 2009 15:26:45 -0300, Mario Rabe escreveu: Hi, Hi! how can I do a redirect from a XHR-request? Here an example to make clear what I want to do: If it was a Tapestry-provided event, you could just return a page instance, a page class, an URL or a page name in an event handler method. Looking at the Form component sources, it uses this callback instance in its VALIDATE_FORM event: ComponentResultProcessorWrapper callback = new ComponentResultProcessorWrapper(componentEventResultProcessor); componentEventResultProcessor comes from an environmental service: @Environmental private ComponentEventResultProcessor componentEventResultProcessor; Try using the above callback and please post the results. :) -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
redirect from ajax request
Hi, how can I do a redirect from a XHR-request? Here an example to make clear what I want to do: I've got a couter-component which shows a count and 2 links (up and down). If a link is clicked, the count is changed inPlace. A "ValueChanged"-Event is triggered on every change. [Pseudo-Code. won't compile, just to show the intention] class Counter{ @Property private int count; EventCallback callback = new EventCallback(){ boolean handleEvent(...){ ... } }; onUp(){ count++; resources.triggerEvent("valueChanged", new Object[]{count}, callback); } onDown(){ count--; resources.triggerEvent("valueChanged", new Object[]{count}, callback); } } That counter can be used on pages and the page can do something if user changes value. class CounterPage{ Object onValueChangeFromMyCounter(int count){ if(count > Oracle.MYSTICAL_VALUE){ System.secretOperation(); } } } Now my question is how to do a page-redirect in the EventListener on the page? I can return an URL from it but to do with it in the callback? Which service is responsible? And does tapestry.js handle redirects in XHR-requests as W3C-XHR doesn't? Greetings Mario