简体   繁体   中英

Migrating from Struts1 to Struts2

I am migrating an application from Struts 1 to Struts 2. I have encountered the following code snippet. Please let me know how to replace the code snippet in Struts 2.

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);
}

And another code snippet is like this:-

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);
    }

Should I replace the above code with addActionError(msg) ?

In Struts 1 you should return ActionForward from the execute method. Struts 2 returns a result code of type String . So the code where ActionForward is expected should be replaced with result code. The action result should be configured to the action the same way like you configure forwards in Struts 1.

Create two result configs: one is redirectAction result type, and another dispatcher result type. Like this

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

The code should be replace with

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; 
    }
}

The errors are provided by the ActionSupport class that your action should inherit. Then you can use the code

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

In the JSP you can display errors with

<s:actionerror/>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM