我正在尝试使用在此处找到的Grails购物车插件:http://grails.org/plugin/shopping-cart
我能够在应用程序中成功安装插件,并将服务注入(inject)到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
最佳答案
根据文档,它[“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']
}
为了进行测试,我创建了以下域和 Controller 。
域:
package com.test
class MyProduct extends com.metasieve.shoppingcart.Shoppable {
String name
static constraints = {
name(blank: false)
}
@Override
String toString() {
return name
}
}
Controller :
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']
}
}
}