Grails веб-поток - PullRequest
       16

Grails веб-поток

3 голосов
/ 16 июня 2009

Есть ли способ передать данные модели в состояние просмотра? Рассмотрим следующий пример состояния просмотра:

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

Если я хочу передать модель данных [products: Product.list()] в showProducts.gsp, есть ли способ сделать это, кроме как перед состоянием действия с состоянием действия, которое сохраняет модель в области потока?

Спасибо, Дон

Ответы [ 3 ]

5 голосов
/ 18 июня 2009

Хм, прошло немного времени с тех пор, как я сделал поток, и ваш пример упрощен (надеюсь, просто ради примера).

Чего вам не хватает, так это начального действия в потоке. Имейте в виду, что действие потока «просмотр» в качестве вашего showProducts просто говорит о том, что делать, когда ваш showProducts gSP ПРЕДСТАВЛЯЕТ. Это действие, которое отправило вас показать продукты, которые должны создать модель для использования в 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)
}

Имеет смысл?

0 голосов
/ 17 июня 2009

Вы можете попробовать это (при условии, что вы хотите перейти к оформлению заказа):

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 голосов
/ 17 июня 2009

Может быть, я не понимаю вопроса, но не можете ли вы сделать

render (просмотр: "showProducts", модель: [продукты: Product.list ()]

внутри вашего контроллера?

...