嘿 我正在使用Spring MVC,我习惯于将DTO“发送”到视图而不直接填充servlet请求,这非常灵活和有效。我试图弄清楚如何在Struts中做类似的事情,因为据我所知,如何“发送”DTO进行查看的唯一方法是通过请求调度程序,其中servlet请求使用键值样式的DTO填充由程序员手动完成。
与Spring MVC相比,这导致视图层(JSP)中的逻辑过多。
这是DTO从处理程序转移到视图层的唯一方法吗?
答案 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>