Grails View认为模型为空

时间:2016-05-11 15:37:18

标签: grails grails-3.0

我有一个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找到了很多很棒的文档,但似乎没有什么能覆盖这个奇怪的错误。

2 个答案:

答案 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