ShoppingCart插件的Grails问题

时间:2014-01-20 18:07:31

标签: grails grails-plugin

我正在尝试使用此处找到的Grails购物车插件:http://grails.org/plugin/shopping-cart

我能够在我的应用程序中成功安装插件,并在我的Controller中注入服务:

class TestController {
def shoppingCartService

def index() {

    def s = new DomainObj(name: "A Plain Ole Domain Object")
    s.addToShoppingCart()
 }
}

这似乎是将产品添加到我的购物车中,正如我所料。但是,我现在遇到的问题实际上是从购物车中列出商品。根据调试器,运行上面的代码后,购物车确实有一个项目,因为它返回:

com.metasieve.shoppingcart.ShoppingItem : 1

该项目已正确添加到购物车,但现在我想实际列出该项目的名称,所以在这种情况下,我想显示名称A Plain Ole Domain Object。我该怎么做?

我不确定从购物车中取回实际物品的语法。该文档没有描述如何清楚地做到这一点,因为它只是说明以下内容应该有效:

def checkedOutItems = shoppingCartService.checkOut()

checkedOutItems.each { 
println it['item'] 
println it['qty'] 
}

但是那个输出 com.metasieve.shoppingcart.ShoppingItem : 1,它只是对购物车中某些任意商品的引用。我想找回我的物品的实际名称。

提前致谢。

编辑:

我的域类(DomainObj)定义如下:

class DomainObj extends com.metasieve.shoppingcart.Shoppable {
String name

static constraints = {
name blank: false
}
}

编辑#2:

def index() {

    def s = new DomainObj(name: "A Plain Ole Domain Object")
    s.addToShoppingCart()
    def r = new DomainObj(name: "Second Plain Ole Domain Object")
    r.addToShoppingCart()

    def checkedOutItems = shoppingCartService.checkOut()


   println currentItems
    println "-----"

    checkedOutItems.each {
        println it['item']
        println it['qty']
    }
}

这个输出是:

[com.metasieve.shoppingcart.ShoppingItem : 1, com.metasieve.shoppingcart.ShoppingItem : 2]

com.metasieve.shoppingcart.ShoppingItem : 2

1

com.metasieve.shoppingcart.ShoppingItem : 1

1

1 个答案:

答案 0 :(得分:1)

根据文档,它[“item”]为您提供了扩展Shoppable的域类的实体。所以在这种情况下,当你打印它时,它调用该域类的toString()方法。如果你想要返回name属性的值,你需要实现自己的toString()。这是一个例子

@Override
String toString() {
  return name
}

编辑: 好吧,从文档中不清楚它['item']是一个指向Shoppable实例的指针,然后您可以使用它来查询购物车中的实际产品,如下所示:

com.metasieve.shoppingcart.Shoppable.findByShoppingItem(it['item'])

因此,以下内容将打印出产品的toString()值

checkedOutItems.each {
  println com.metasieve.shoppingcart.Shoppable.findByShoppingItem(it['item'])
  println it['qty']
}

为了测试,我创建了以下域和控制器。

域:

package com.test

class MyProduct extends com.metasieve.shoppingcart.Shoppable {
    String name

    static constraints = {
        name(blank: false)
    }

    @Override
    String toString() {
        return name
    }
}

控制器:

package com.test

class MyProductController {

    def shoppingCartService

    def index() { 
        def p1 = new MyProduct(name: 'one')
        p1.save(flush: true, failOnError: true)
        p1.addToShoppingCart()
        def p2 = new MyProduct(name: 'two')
        p2.save(flush: true, failOnError: true)
        p2.addToShoppingCart()

        def checkedOutItems = shoppingCartService.checkOut()
        checkedOutItems.each {
           println com.metasieve.shoppingcart.Shoppable.findByShoppingItem(it['item'])
           println it['qty']
        }
    }
}