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