0

Action よりも DispatchActions を使用する方がよいのはどのような場合ですか?

4

1 に答える 1

0

同じ struts モジュール内の類似のフォーム Bean で多くの類似のアクションが必要な場合 (create read update delete同じオブジェクトへの CRUD アクションなど)。プレーンActionでは、インポート、ヘッダー、メソッド シグネチャを含む 4 つの Struts アクション ファイルが必要です。

// CreateAction.java
package com.example.package;
// imports and header
public class CreateAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) {
        // actual code
    }
}

// ReadAction.java
package com.example.package;
// imports and header
public class ReadAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) {
        // actual code
    }
}

// UpdateAction.java
package com.example.package;
// imports and header
public class UpdateAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) {
        // actual code
    }
}

// DeleteAction.java
package com.example.package;
// imports and header
public class DeleteAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) {
        // actual code
    }
}

また、4 つのアクション マッピングが必要になります(もちろん、注釈struts-config.xmlを使用していない場合)。しかし実際には、次のコード層 (manager/DAO/etc) を呼び出すだけで、Web から (要求/応答/マッピング クラスから) 独立しているため、単体テストでテスト可能であり、テスト駆動型の開発とコードの再利用が可能になります。4 つのクラスはすべて、1 ~ 2 行のコードのみが異なります。残りは定型文で、何度も繰り返します。

パラメータを追加するか、既存のパラメータを HTTP リクエスト (つまり、JSP フォーム タグ) で再利用することにより、4 つのアクションすべてを 1 つのクラスにまとめることができますEventDispatchAction

// CRUDAction.java
package com.example.package;
// imports and header
public class CRUDAction extends EventDispatchAction {
    public ActionForward create(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) {
        // actual code
    }

    public ActionForward read(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) {
        // actual code
    }

    public ActionForward update(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) {
        // actual code
    }

    public ActionForward delete(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response) {
        // actual code
    }
}

これにより、必要なボイラープレートがはるかに少なくなります。実行したいアクションを伝えるために、送信ボタンを使用できます。

<html:submit property="update" value="Save" />
<html:submit property="delete" value="Delete" />
于 2012-11-26T22:55:37.050 に答える