Struts 1.3: когда лучше использовать DispatchActions, чем Action?

В каких случаях лучше использовать DispatchActions, чем Action?

1 ответ

Решение

Когда вам нужно много похожих действий с похожим компонентом формы в одном модуле Struts (например, действия CRUD для createreadupdatedelete тот же объект). С равниной 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 (конечно, если вы не используете аннотации). Но на самом деле они просто вызовут следующий уровень кода (менеджер /DAO/ и т. Д.), Который не зависит от сети (от классов запроса / ответа / отображения) и, таким образом, тестируется с помощью модульных тестов, позволяющих разработку через тестирование и возможность повторного использования кода. Все четыре класса будут отличаться только 1-2 строками кода. Остальное - шаблон, повторяющийся снова и снова.

Добавляя дополнительные параметры или повторно используя существующий в HTTP-запросе (другими словами: в теге формы JSP), вы можете упаковать все 4 действия в один класс, например, в 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" />
Другие вопросы по тегам