2009-09-12 8 views
1

Je suis nouveau à Grails et utilise actuellement Grails 1.1.1. Je ne sais pas comment passer une liste d'un contrôle/action à une vue, puis passer la même liste de cette vue à une autre action. La raison pour laquelle je le fais est de réutiliser l'objet prédéfini (une "liste" dans ce cas). Voici mon scénario:Grails: Réutiliser une liste prédéfinie

J'ai une vue de recherche (search.gsp) qui appelle l'action "search", qui interroge une base de données, stocke les résultats dans une liste (en utilisant les critères Hibernate), et rend cette liste sur un vue des résultats (results.gsp). Sur le fichier result.gsp, j'ai la barre d'export (en utilisant le plugin d'export grails) pour exporter cette liste vers un fichier EXCEL. J'ai du mal à passer cette liste à la vue de résultat afin que je puisse passer à l'action "d'exportation".

J'apprécie vraiment l'aide si quelqu'un peut donner un conseil à ce sujet. Merci.

Répondre

3

Puisque vous voulez transmettre cet objet à travers plusieurs demandes, vous devrez stocker dans le user session, comme ceci:

def search = { 
     session["results"] = queryDatabase(params) 
} 

def export = { 
     def results = session["results"] 
} 
0

Comme Michael l'a souligné, votre scénario implique différentes requêtes HTTP, vous ne peut pas simplement "passer" les résultats à la deuxième action de la même manière que vous pouvez passer un modèle d'une action de contrôleur à une vue. Bien que la suggestion de Michael (stocker le résultat dans la session utilisateur) fonctionnera certainement, une alternative (et IMHO plus commun) approche serait de passer les mêmes paramètres de demande (par exemple votre requête de recherche) à l'action d'exportation, et re-chercher données de la base de données dans votre action d'exportation.

Il y a quelques avantages à cette approche sans état:

  1. Il est plus évolutive, puisque vous n'avez pas à vous soucier de la session « pollution » ou de reproduire la session dans des environnements distribués
  2. Vous avez gagné » t rencontrer des problèmes si l'utilisateur émet plus d'une requête de recherche simultanée (par exemple dans différents onglets du navigateur). C'est un problème sérieux avec l'approche de session.
+0

Il est seulement plus évolutif tant que votre serveur de base de données peut prendre la charge supplémentaire ... –

Questions connexes