2009-06-16 4 views
3

Existe-t-il un moyen de transmettre des données de modèle à un état d'affichage? Prenons l'exemple de vue suivant l'état:Grails Web flow

class BookController { 
    def shoppingCartFlow = { 
    showProducts { 
     on("checkout").to "enterPersonalDetails" 
     on("continueShopping").to "displayCatalogue" 
    } 
    } 
} 

Si je veux passer le modèle de données [products: Product.list()] à showProducts.gsp, est-il possible de le faire à part qui précède l'état d'affichage avec un état d'action qui stocke le modèle étendue de flux?

Merci, Don

Répondre

0

Peut-être que je ne comprends pas la question, mais ne peut pas vous faire

rendre (voir: "showProducts", modèle : [produits: Product.list()]

dans votre contrôleur

+0

Ce n'est pas une action normale du contrôleur, c'est un état de flux Web. Je ne suis pas sûr que la méthode de rendu puisse être utilisée comme vous l'avez suggéré dans les états d'affichage. –

0

vous pouvez essayer cette (en supposant que vous voulez aller à la caisse):

showProducts { 
     on("checkout"){ 
      // do somethings here too if you like 
      // then pass your data as below: 
      [products: Product.list()] 
     } .to "enterPersonalDetails" 
     on("continueShopping").to "displayCatalogue" 
} 
+0

Je veux passer les données à showProducts.gsp, pas à EnterPersonalDetails.gsp –

+0

J'essayais de vous donner un exemple pour que vous puissiez construire sur cela ... – tegbains

5

Hmm, ça a été un peu depuis que je l'ai fait un flux, et votre exemple est simpliste (juste pour que j'espère être à cause d'un exemple).

Ce qui manque est l'action initiale dans le flux. Gardez à l'esprit qu'une action de flux "vue" comme votre showProducts est juste dit quoi faire quand votre showProducts POSTS gsp. Il est l'action que vous ENVOYÉ showProducts qui devrait créer le modèle à utiliser dans showProducts.gsp

def ShoppingCartFlow = { 
    initialize { 
     action { // note this is an ACTION flow task 
      // perform some code 
      [ model: modelInstance ] // this model will be used in showProducts.gsp 
     } 
     on ("success").to "showProducts"  
     // it's the above line that sends you to showProducts.gsp 
    } 

    showProducts { 
     // note lack of action{} means this is a VIEW flow task 
     // you'll get here when you click an action button from showProducts.gsp 
     on("checkout").to "enterPersonalDetails" 
     on("continueShopping").to "displayCatalogue" 
    } 

    // etc. (you'll need an enterPersonalDetails task, 
    // displayCatalogue task, and they 
    // should both be ACTION tasks) 
} 

sens?

+0

C'est exactement comme ça que je l'ai implémenté, en utilisant 2 déclaré: un état d'action suivi d'un état d'affichage. Ma question était vraiment de savoir si ceux-ci pourraient être fusionnés en un seul État. Donc je suppose que la réponse est non. –

+1

À droite, la seule fois où vous pouvez avoir du code (y compris la création d'un modèle) se trouve dans une tâche d'action ou une tâche de transition (entre les tâches on ("") et .to "" dans la vue) – billjamesdev

Questions connexes