2015-09-07 48 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/>