Struts альтернатива модели Spring MVC - PullRequest
2 голосов
/ 05 ноября 2010

Эй, я использую Spring MVC и привык «отправлять» DTO в представление без непосредственного заполнения запроса сервлета, что очень гибко и эффективно.Я пытаюсь выяснить, как сделать нечто подобное в Struts, потому что, насколько я вижу, единственный способ «отправить» DTO для просмотра - через диспетчер запросов, где запрос сервлета заполняется DTO в стиле ключ-значение.вручную программистом.

Это приводит к слишком большому количеству логики на уровне представления (JSP) по сравнению с Spring MVC.

Является ли это единственным способом передачи DTO из обработчиков на уровень представления?

1 Ответ

2 голосов
/ 05 ноября 2010

Обычно я видел, как это делается в Struts, через объекты Form. Этот класс формы расширяет ActionForm. Затем в Struts-config.xml вы определяете эту форму как компонент формы. Затем добавьте ссылку на компонент формы в определении компонента класса действия. Затем в jsp повторно создайте ссылку на форму, чтобы получить данные из DTO.

Например: -

The Action class:

public class SomeAction extends DispatchAction {
 public ActionForward someRequest(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)
            throws Exception {
  SomeForm someForm = ( SomeForm) form;
  List<SomeDTO> someList = populateDto();
  someForm.setSomeList(someList);
  return mapping.findForward("someAction");

}
The Form class:

public class SomeForm extends ActionForm{

   List<SomeDTO> someList;
   //getter and setters for someList
}

StrutsConfig:

<form-beans>
    <form-bean name="someForm" type="my.forms.SomeForm" />
</form-beans>

<action path="/someRequest"
            type="my.actions.SomeAction"
            name="someForm" scope="request" >
<forward name="someAction" path="goesSomeWhere" />

</action>

View:

<c:forEach items="${someForm.someList}" var="someThing" varStatus="someCounter">
    <c:out value="${someThing.foo}" /> <!-- assuming foo is a member in SomeThing DTO -->
</c:forEach>
...