4

Struts 1 から Struts 2 へのアプリケーションの移行中

一部の場所では、リクエスト パラメータに基づいて、同じアクション クラスが異なるタイプのビューに使用されています。

例: が 1 の場合は、createType1 つのパラメーターを追加する必要があること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 で同じことを行うことはできませんActionForward。Struts 2 で動的パラメーターを変更する可能性はありますか?

4

1 に答える 1

5

で動的パラメーターを使用できます。動的結果resultの構成を参照してください。

アクションでは、パトラメーターのゲッターを書く必要があります

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

アクション マッピングから URL を作成するためのより良い方法が必要な場合は、この回答を参照してください。

于 2013-07-24T15:33:31.877 に答える