I'm trying to have my struts2 app redirect to a generated url. In this case, I want the url to use the current date, or a date I looked up in a database. So /section/document
becomes /section/document/2008-10-06
What's the best way to do this?
I'm trying to have my struts2 app redirect to a generated url. In this case, I want the url to use the current date, or a date I looked up in a database. So /section/document
becomes /section/document/2008-10-06
What's the best way to do this?
I ended up subclassing Struts' ServletRedirectResult
and overriding it's doExecute()
method to do my logic before calling super.doExecute()
. it looks like this:
public class AppendRedirectionResult extends ServletRedirectResult {
private DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
@Override
protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
String date = df.format(new Date());
String loc = "/section/document/"+date;
super.doExecute(loc, invocation);
}
}
I'm not sure if this is the best way to do it, but it works.
Here's how we do it:
In Struts.xml, have a dynamic result such as:
<result name="redirect" type="redirect">${url}</result>
In the action:
private String url;
public String getUrl()
{
return url;
}
public String execute()
{
[other stuff to setup your date]
url = "/section/document" + date;
return "redirect";
}
You can actually use this same technology to set dynamic values for any variable in your struts.xml using OGNL. We've created all sorts of dynamic results including stuff like RESTful links. Cool stuff.
One can also use annotations and the Convention plug-in to avoid repetitive configuration in struts.xml:
@Result(location="${url}", type="redirect")
The ${url} means "use the value of the getUrl method"
Ivan