我有一个Grails 3应用程序,我尝试使用视图将控制器的输出编组为特定格式。我添加了两个视图:1。与views/order/getOrderLines.gson
下的控制器操作绑定的模型和2.个别orderLines的模板views/order/_orderLines.gson
但是我的输出作为空对象返回。很难弄明白。以下是我的观点:
views/order/getOrderLines.gson
model {
List<OrderLine> orderLinesList
}
json tmpl.orderLines(orderLinesList)
views/order/_orderLine.gson
model {
OrderLine orderLine
}
json {
id orderLine.id
description orderLine.description
...
}
但我在NullPointerException
上获得orderLine
,好像没有从List<OrderLine>
返回OrderController
。当我删除这些视图时,输出会像预期的那样返回,尽管它没有像我希望的那样编组。
最奇怪的事情:这适用于我的大多数其他观点。我在Grails Views' documentation找到了很多很棒的文档,但似乎没有什么能覆盖这个奇怪的错误。
答案 0 :(得分:2)
使用模板的正确方法应该是这样的:
档案_orderLine.gson
import com.example.OrderLine
model{
OrderLine orderLine
}
json{
id orderLine.id
description orderLine.description
...
}
档案getOrderLines.gson
import com.example.OrderLine
model{
Iterable<OrderLine> orderLineList
}
json tmpl.orderLine(orderLineList ?: [])
注意单数orderLineList
不是orderLinesList
,与变量名称orderLine
相同而不是orderLines
如sct999
所述,模型变量的名称与使用的模板名称相同。但这只是默认情况。你甚至可以这么明确:
g.render(template:'<path to template>', collection: <your collection>, var: '<target variable>')
答案 1 :(得分:1)
如果您的模板名称为_orderLines.gson
,则应将_orderLines.gson
中的模型变量从orderLine
重命名为orderLines
。
因此,您的_orderLines.gson
模板看起来像这样
model {
OrderLine orderLines
}
json {
id orderLines.id
description orderLines.description
...
}
正如http://grails.github.io/grails-views/latest/#_templates所说
模型变量的名称与模板名称相同。
因此,您的模型变量应为orderLines
(与模板名称相同)而不是orderLine