2015-09-07 72 views
1

我正在將應用程序從Struts 1遷移到Struts 2.我遇到了以下代碼片段。請讓我知道如何更換代碼片段在Struts中2從Struts1遷移到Struts2

protected ActionForward getActionForward(FilterContext ctx, String key, boolean redirect) { 
    HashMap filterForwards = ctx.getFilterForwards(); 
    String forwardPage = (String)filterForwards.get(key); 
    if(forwardPage == null) 
     return null; 
    return new ActionForward(forwardPage, redirect); 
} 

而另一代碼片段是這樣的: -

protected void setError(HttpServletRequest req, String msg) { 
     ActionMessages errors = new ActionMessages(); 
     errors.add("exception", new ActionMessage(MSG_KEY, msg)); 
     req.setAttribute(Globals.ERROR_KEY, errors); 
    } 

我是否應該更換addActionError(msg)上面的代碼?

+0

你可以發表你的完整的代碼顯示錯誤。通過這段代碼,我們無法猜測你想要達到什麼目的? – soorapadman

+0

好吧,很難發佈整個代碼。但在第一種情況下,該功能用於頁面重定向。在第二種情況下,代碼用於設置全局動作錯誤。我希望它有幫助。 – Test

回答

1

在Struts 1中,您應該從execute方法返回ActionForward。 Struts 2返回String類型的結果代碼。所以預計ActionForward的代碼應該用結果代碼替換。應該將動作結果配置爲與您在Struts 1中向前配置相同的方式。

創建兩個結果配置:一個是redirectAction結果類型,另一個是dispatcher結果類型。像這樣

<result name "redirect" type="redirectAction">${forwardPage}</result> 
<result>${forwardPage}</result> 

代碼應與

private String forwardPage; 

public String getForwardPage() { return forwardPage; } 

public void setForwardPage(String forwardPage) { 
    this.forwardPage = forwardPage; 
} 

protected String getActionForward(FilterContext ctx, String key, boolean redirect) { 
    HashMap filterForwards = ctx.getFilterForwards(); 
    String forwardPage = (String)filterForwards.get(key); 
    if(forwardPage == null) 
     return NONE; 
    if (redirect) { 
     setForwardPage(forwardPage); 
     return "redirect"; 
    } else { 
     setForwardPage(forwardPage) 
     return SUCCESS; 
    } 
} 

ActionSupport類,你的行動應該繼承提供的錯誤來代替。然後你可以使用代碼

protected void setError(String msg) { 
    addActionError(getText("exception", new Object[]{msg})); 
} 

在JSP中你可以用

<s:actionerror/>