在Struts 2中使用ActionForward和动态参数

时间:2013-07-24 15:25:34

标签: java struts2 struts actionresult

将应用程序从Struts 1迁移到Struts 2

在某些地方,根据请求参数,相同的操作类已用于不同类型的视图。

例如:如果createType为1表示需要附加一个参数,或者如果createType为2表示需要追加一些额外的参数,就像我需要将动态参数传递给某些参数一样使用ActionForward的其他操作。

的struts-config.xml

<action path="/CommonAction" type="com.example.CommonAction" scope="request">
    <forward name="viewAction" path = "/ViewAction.do"/>
</action>

行动类

public class CreateAction extends Action
{
    public ActionForward execute(ActionMapping m, ActionForm f, HttpServletRequest req, HttpServletResponse res) throws ServletException, Exception
    {
            String actionPath = m.findForward("viewAction").getPath();
            String createType = req.getParameter("createType");
            String params = "&action=view";
            if("1".equals(createType)){
               params = params + "&from=list";
            }else if("2".equals(createType)){
               params = params + "&from=detail&someParam=someValue";
            }//,etc..
            String actionUrl = actionPath+"?"+params;
            return new ActionForward(actionUrl);
    }
}

但是,我无法在Struts 2中做同样的事情。在Struts 2中是否有可能将ActionForward与动态参数一起使用?

1 个答案:

答案 0 :(得分:5)

您可以使用result的动态参数,请参阅dynamic result configuration

在动作中你应该为参数编写一个getter

private String actionUrl;

public String getActionUrl() {
    return actionUrl;
}

并配置结果

<action name="create" class="CreateAction">
    <result type="redirect">${actionUrl}</result>
</action>

所以,常识就是重写像

这样的代码
public class CreateAction extends ActionSupport
{

    private String actionUrl;

    public String getActionUrl() {
        return actionUrl;
    }

    @Override
    public String execute() throws Exception
    {
            String actionPath = "/view";
            String createType = req.getParameter("createType");
            String params = "&action=view";
            if("1".equals(createType)){
               params = params + "&from=list";
            }else if("2".equals(createType)){
               params = params + "&from=detail&someParam=someValue";
            }//,etc..
            actionUrl = actionPath+"?"+params;
            return SUCCESS;
    }
}

如果您需要更好的方法来创建动作映射的网址,您可以查看this回答。