我試圖讓我的Struts2應用程序重定向到一個生成的URL。在這種情況下,我希望URL使用當前日期,或者我在數據庫中查找的日期。所以/section/document
變成/section/document/2008-10-06
如何在Struts 2中做動態URL重定向?
這樣做的最好方法是什麼?
我試圖讓我的Struts2應用程序重定向到一個生成的URL。在這種情況下,我希望URL使用當前日期,或者我在數據庫中查找的日期。所以/section/document
變成/section/document/2008-10-06
如何在Struts 2中做動態URL重定向?
這樣做的最好方法是什麼?
下面是我們如何做到這一點:
在struts.xml中,有一個動態的結果,如:
<result name="redirect" type="redirect">${url}</result>
在行動:
private String url;
public String getUrl()
{
return url;
}
public String execute()
{
[other stuff to setup your date]
url = "/section/document" + date;
return "redirect";
}
實際上,你可以使用相同的技術,使用OGNL爲struts.xml中的任何變量設置動態值。我們已經創建了各種各樣的動態結果,包括像RESTful鏈接這樣的東西。很酷的東西。
我最終在調用super.doExecute()
之前完成了Struts的ServletRedirectResult
的子類化並覆蓋了它的doExecute()
方法來完成我的邏輯。它看起來像這樣:
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);
}
}
我不確定這是否是最好的方法來做到這一點,但它的工作原理。
你也可以使用annotations
和公約的插件,以避免重複的struts.xml配置:
@Result(location="${url}", type="redirect")
的$ {url}的意思是「使用getURL方法的價值」
如果有人想直接ActionClass
重定向:
public class RedirecActionExample extends ActionSupport {
HttpServletResponse response=(HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
url="http://localhost:8080/SpRoom-1.0-SNAPSHOT/"+date;
response.sendRedirect(url);
return super.execute();
}
編輯:添加缺少的報價。
您可以重定向到使用註釋另一個動作 -
人們可以直接從一個攔截器重定向到沒有它參與的行動方面。
在struts.xml中
<global-results>
<result name="redir" type="redirect">${#request.redirUrl}</result>
</global-results>
在攔截
@Override
public String intercept(ActionInvocation ai) throws Exception
{
final ActionContext context = ai.getInvocationContext();
HttpServletRequest request = (HttpServletRequest)context.get(StrutsStatics.HTTP_REQUEST);
request.setAttribute("redirUrl", "http://the.new.target.org");
return "redir";
}
非常感謝,這很好地工作!有沒有辦法對xml進行更改,以便它不需要應用於我擁有的每一個動作?我理想的情況是適用於我所有的行爲。 – Chris 2009-11-24 04:51:52
你可能會嘗試一個全局結果。我還沒有爲動態變量做過這方面的實驗,但只要該操作返回結果,我就不會看到任何不可行的原因。 – 2009-12-04 18:12:40
這項工作的全球業績很好。 – 2013-05-15 18:05:02