Struts 1.3: когда лучше использовать DispatchActions, чем Action?
В каких случаях лучше использовать DispatchActions, чем Action?
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" />