Grails View 认为模型为空

Grails View thinks model is null

我有一个 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
  ...
}

但是我在 orderLine 上得到了 NullPointerException,就好像 OrderController 没有返回 List<OrderLine>。当我删除这些视图时,输出 returns 正如预期的那样,尽管它没有按照我希望的方式编组。

最奇怪的事情:这适用于我的大多数其他观点。我在 Grails Views' documentation 找到了很多很棒的文档,但似乎没有任何内容可以解决这个奇怪的错误。

如果您的模板名称是 _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所说

The name of the model variable is the same as the template name.

因此,您的模型变量应该是 orderLines(与模板名称相同)而不是 orderLine

使用模板的正确方法应该是这样的:

文件_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>')