Action よりも DispatchActions を使用する方がよいのはどのような場合ですか?
1 に答える
同じ 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" />