
Classes | |
| class | Observer |
| interface | Restorable |
Public Member Functions | |
| ERXComponentActionRedirector (Restorable r) | |
| WOResponse | originalResponse () |
| WOResponse | redirectionResponse () |
| String | sessionID () |
| void | setOriginalResponse (WOResponse value) |
| String | url () |
Static Public Member Functions | |
| static void | createRedirector (WOActionResults results) |
| static ERXComponentActionRedirector | currentRedirector () |
| static ERXComponentActionRedirector | redirectorForRequest (WORequest request) |
Static Protected Member Functions | |
| static void | storeRedirector (ERXComponentActionRedirector redirector) |
Protected Attributes | |
| WOResponse | originalResponse |
| WOResponse | redirectionResponse |
| String | sessionID |
| String | url |
Static Protected Attributes | |
| static final Logger | log = Logger.getLogger(ERXComponentActionRedirector.class) |
| static final NSMutableDictionary | responses = new NSMutableDictionary() |
Static Package Functions | |
| [static initializer] | |
Static Private Attributes | |
| static Observer | observer |
public WOComponent myAction() {
WOComponent nextPage = pageWithName("Main");
nextPage.takeValueForKey(new Integer(100), "someValue");
return nextPage;
}
then Main could be implemented something like this:
public class Main extends WOComponent implements ERXComponentActionRedirector.Restorable {
static Logger log = Logger.getLogger(Main.class);
public Integer someValue = new Integer(10);
public Main(WOContext aContext) {
super(aContext);
}
// this page has a "Increment Some Value" link to itself which just doubles the current value
public WOComponent addAction() {
someValue = new Integer(someValue.intValue()*2);
log.info(someValue);
return this;
}
But this is just one possibility. It only locates all the code in one place. public String urlForCurrentState() {
return context().directActionURLForActionNamed("Main$Restore", new NSDictionary(someValue, "someValue"));
}
public static class Restore extends WODirectAction {
public Restore(WORequest aRequest) {
super(aRequest);
}
public WOActionResults defaultAction() {
WOComponent nextPage = pageWithName("Main");
Number someValue = context().request().numericFormValueForKey("someValue", new NSNumberFormatter("#"));
if(someValue != null) {
nextPage.takeValueForKey(someValue, "someValue");
}
return nextPage;
}
}
}
The actual workings are:
For all of this to work, your application should override the request-response loop like:
public WOActionResults invokeAction(WORequest request, WOContext context) {
WOActionResults results = super.invokeAction(request, context);
ERXComponentActionRedirector.createRedirector(results);
return results;
}
public void appendToResponse(WOResponse response, WOContext context) {
super.appendToResponse(response, context);
ERXComponentActionRedirector redirector = ERXComponentActionRedirector.currentRedirector();
if(redirector != null) {
redirector.setOriginalResponse(response);
}
}
If you are using ERXApplication, you should set the public WOResponse dispatchRequest(WORequest request) {
ERXComponentActionRedirector redirector = ERXComponentActionRedirector.redirectorForRequest(request);
WOResponse response = null;
if(redirector == null) {
response = super.dispatchRequest(request);
redirector = ERXComponentActionRedirector.currentRedirector();
if(redirector != null) {
response = redirector.redirectionResponse();
}
} else {
response = redirector.originalResponse();
}
return response;
}
er.extensions.ERXComponentActionRedirector.enabled=true property instead.
contructs the redirector from the Restorable.
| r | - Restorable component used to construct a redirector |
| [static initializer] | ( | ) | [static, package] |
| static void createRedirector | ( | WOActionResults | results | ) | [static] |
Creates and stores a Redirector if the given results implement Restorable.
| results |
| static ERXComponentActionRedirector currentRedirector | ( | ) | [static] |
Uses ERXThreadStorage with the key "redirector".
| WOResponse originalResponse | ( | ) |
| WOResponse redirectionResponse | ( | ) |
| static ERXComponentActionRedirector redirectorForRequest | ( | WORequest | request | ) | [static] |
| request | The request |
| void setOriginalResponse | ( | WOResponse | value | ) |
Sets the original response.
| value | the original response. |
| static void storeRedirector | ( | ERXComponentActionRedirector | redirector | ) | [static, protected] |
stores the redirector in the cache.
| redirector | The redirector to store. |
final Logger log = Logger.getLogger(ERXComponentActionRedirector.class) [static, protected] |
logging support
WOResponse originalResponse [protected] |
the original response
WOResponse redirectionResponse [protected] |
the redirection response
final NSMutableDictionary responses = new NSMutableDictionary() [static, protected] |
static cache to hold the responses. They are stored on a by-session basis.
1.5.8