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

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


person Sefran2    schedule 15.11.2012    source источник


Ответы (1)


Когда вам нужно много похожих действий с похожим компонентом формы в одном и том же модуле Struts (например, действия CRUD для create read update delete одного и того же объекта). С простым 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" />
person Victor    schedule 26.11.2012