Re: redirect from ajax request

2009-08-10 Thread 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
Figueiredothiag...@gmail.com 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

2009-08-10 Thread Mario Rabe
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 hls...@gmail.com

 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
 Figueiredothiag...@gmail.com 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

2009-08-09 Thread Thiago H. de Paula Figueiredo
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



redirect from ajax request

2009-08-08 Thread Mario Rabe
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