2010-11-05 28 views
2

Hey, J'utilise Spring MVC et je me suis habitué à "envoyer" DTO à une vue sans remplir la demande de servlet directement, ce qui est très flexible et efficace. J'essaie de comprendre comment faire quelque chose de similaire dans Struts, car d'après ce que je peux voir, la seule façon de "voir" DTO à afficher est via le répartiteur de requêtes où la requête servlet est remplie de DTOs dans le style clé-valeur manuellement par le programmeur.Struts alternative à Spring MVC modèle

Il en résulte une trop grande logique dans la couche de vue (JSP) par rapport à Spring MVC.

Est-ce la seule façon de transférer des DTO des gestionnaires vers un calque de vue?

Répondre

2

Généralement, la façon dont j'ai vu cela dans Struts se fait via des objets Form. Cette classe de formulaire étend ActionForm. Ensuite, dans le fichier struts-config.xml, vous définissez ce formulaire en tant que bean formulaire. Ajoutez ensuite une référence au bean de formulaire dans la définition de bean de classe d'action. Ensuite, dans le fichier jsp, vous devez renvoyer le formulaire pour obtenir les données du DTO.

Par exemple: -

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> 
+0

Ce serait logique, mais le nom ActionForm est un peu déroutant si elle utilisé de cette façon. Cela ressemble à une solution de contournement :-) mais peu importe si ça sert bien, merci – lisak

+0

Vous êtes les bienvenus. :-) – CoolBeans