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.