Calling a DirectAction with values from a WORedirect
WORedirect is useful when you need a regular Component action (i.e. non DA) to lead somewhere other than another WOComponent (i.e. If you need to perform some cleanup and return a company homepage when a logout link is clicked).
Luckily for us, a WORedirect can also easily allows us to redirect to a DirectAction, as the following code demonstrates:
String searchString; //assume exists
String category; //assume exists
String pageOfResults = "0"
public WORedirect performSearch() {
NSMutableDictionary dict = new NSMutableDictionary();
dict.takeValueForKey(searchString, "searchString");
dict.takeValueForKey(category, "category");
dict.takeValueForKey(pageOfResults, "page");
String url = context().directActionURLForActionNamed(
"search", dict );
WORedirect redirect = new WORedirect(context());
redirect.setUrl(url);
return redirect;
}
This hypothetical action is bound to a WOSubmitButton in a WOForm on a WOComponant. It is important to note that its return type is WORedirect
instead of the usual WOComponent
.
It function is pretty clear, it creates a new NSMutableDictionary
and populates it with the values and keys that we need to append to our DirectAction URL. The single line of code does most of the heavy lifting:
String url = context().directActionURLForActionNamed(
"search", dict );
It creates the DirectAction url (in this case for the searchAction) for us and append the values from our NSMutableDictionary
. Finally we set the url for the WORedirect and return it.
The directActionURLForActionNamed
comes from WOContext
and it’s API can be found here.
Well, I think this will be the last DirecAction specific post. I’ve covered pretty much everything I set out to, so I think I’ll take a break an look for a different topic to examine. If anyone has any suggestions, let me know.