2010-11-14 50 views
2

J'ai une application web qui intègre DWR 3 et Spring 3. Toutes les demandes sont gérées par le DispatcherServlet du Spring. Tout fonctionne. Lorsque je demande une requête AJAX, elle est gérée correctement par le bean de service DWR de support annoté avec @RemoteProxy. Pour renvoyer une réponse, mon bean de service DWR renvoie une chaîne HTML incluant le POJO @DataTransferObject ou simplement le POJO simple. Ce que je veux faire est dans le bean de service de DWR Je veux qu'il fasse suivre le traitement à un bean de Spring @Controller. La requête AJAX sera toujours traitée par le service DWR, mais le traitement réel est délégué au bean contrôleur Spring. En d'autres termes, le bean de service DWR est juste une façade de service au service réel. De cette façon, je ne duplique pas la logique.Intégration de ressorts DWR: est-il possible de transmettre une requête DWR à un contrôleur de ressort?

Est-ce possible?

Permettez-moi de clarifier davantage.

Dans une application non-AJAX normale, lorsqu'un utilisateur soumet un formulaire, voici ce qui se passe:

  1. Il est transmis au DispatcherServlet
  2. ensuite à un haricot annoté @Controller.
  3. Le traitement est ensuite géré par @Service Bean.
  4. Ensuite, le contrôleur renvoie un ModelAndView.

Dans une application DWR-AJAX, lorsqu'un utilisateur soumet un formulaire, voici ce qui se passe:

  1. C'est transmis au DispatcherServlet encore
  2. ensuite à un @RemoteProxy annoté haricot. Le traitement est géré par ce bean. C'est le service de DWR bean.
  3. Ensuite, ce haricot proxy distant retourne soit un @DataTransferObject POJO ou juste chaîne HTML brut

Fondamentalement pour l'application AJAX, après l'étape 2, je le veux de transmettre à la fève @Controller de sorte que tout est encore traité par Spring.

+0

J'ai essayé le WebContextFactory.get(). ForwardToString (...) mais il n'est pas traité ni même transmis à des beans annotés @Controller. Je suppose qu'il n'a pas accès aux contrôleurs Spring? – chris

+0

Voici une solution qui devrait fonctionner mais ce n'est pas le cas. Je suppose que le gars ici utilise un contrôleur de ressort non annoté? http://forum.springsource.org/showthread.php?t=85101 – chris

+0

Voici une question similaire mais celle-ci demande comment transférer une requête de DWR vers une action Struts: http://markmail.org/message/he45oslbejuqieos# requête: + page: 1 + mid: 7tpq3shrcw5i4aup + état: résultats – chris

Répondre

2

Réponse courte est non.

Il n'y a pas de place dans une demande DWR pour un contrôleur de ressort. DWR a un grand soutien pour les haricots de printemps à distance, mais il y a peu de valeur qu'un contrôleur pourrait apporter à cette équation.Cela dit, il n'y a pas de raison que je puisse penser qu'un contrôleur annoté de style ressort 3.0 ne pourrait pas être utilisé comme le grain DWR exposé. La restriction serait que le type de retour ne soit pas ModelAndView mais plutôt votre objet modèle.

+0

Après quelques semaines d'exploration, je ne vois vraiment aucune valeur pour transmettre une requête DWR à un contrôleur Spring – chris

0

Je ne sais pas grand-chose sur l'utilisation des annotations dans ce cas. Avec l'approche déclarative, vous pouvez faire ce qui suit.

En XML de printemps (Notez que fileOperationService est la fève de printemps)

<bean name="BookRequestAjax" class="com.bookie.struts.BookRequestAjax"> 
     <property name="fileOperationService" ref="fileOperationService"/> 
    </bean> 

Votre haricot

public class BookRequestAjax { 
    FileOperationService fileOperationService; 
    public void deleteFile(String fileName){ 
     try{ 
      fileOperationService.deleteFile(fileName); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    public void setFileOperationService(FileOperationService fileOperationService) { 
     this.fileOperationService = fileOperationService; 
    } 

} 

Votre DWR.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd"> 
<dwr> 
    <allow> 
    <create creator="spring" javascript="BookRequestAjax"> 
     <param name="beanName" value="BookRequestAjax" /> 
    </create> 
    </allow> 
</dwr>