Struts是Spring MVC模型的替代品

时间:2010-11-05 18:01:11

标签: java spring-mvc struts2 dto

嘿 我正在使用Spring MVC,我习惯于将DTO“发送”到视图而不直接填充servlet请求,这非常灵活和有效。我试图弄清楚如何在Struts中做类似的事情,因为据我所知,如何“发送”DTO进行查看的唯一方法是通过请求调度程序,其中servlet请求使用键值样式的DTO填充由程序员手动完成。

与Spring MVC相比,这导致视图层(JSP)中的逻辑过多。

这是DTO从处理程序转移到视图层的唯一方法吗?

1 个答案:

答案 0 :(得分:2)

一般来说,我在Struts中看到它的方式是通过Form对象。此表单类扩展了ActionForm。然后在struts-config.xml中将此表单定义为表单bean。然后在操作类bean定义中添加对表单bean的引用。然后在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>