Grails视图认为模型为空

Grails视图认为模型为空,grails,grails-3.0,Grails,Grails 3.0,我有一个Grails3应用程序,我正试图使用一个视图将控制器的输出整理成一种特定的格式。我添加两种观点:1。与视图/order/getOrderLines.gson和2下的控制器操作关联的模型。单个订单行的模板视图/order/\u orderLines.gson model { List<OrderLine> orderLinesList } json tmpl.orderLines(orderLinesList) model { OrderLine orderLine

我有一个Grails3应用程序,我正试图使用一个视图将控制器的输出整理成一种特定的格式。我添加两种观点:1。与
视图/order/getOrderLines.gson
和2下的控制器操作关联的模型。单个订单行的模板
视图/order/\u orderLines.gson

model {
  List<OrderLine> orderLinesList
}
json tmpl.orderLines(orderLinesList)
model {
  OrderLine orderLine
}
json {
  id orderLine.id
  description orderLine.description
  ...
}
import com.example.OrderLine

model{
    OrderLine orderLine
}

json{
    id orderLine.id
    description orderLine.description
    ...
}
import com.example.OrderLine

model{
    Iterable<OrderLine> orderLineList
}

json tmpl.orderLine(orderLineList ?: [])
但是,我的输出返回为空对象。这真的很难弄清楚。以下是我的看法:
views/order/getOrderLines.gson

model {
  List<OrderLine> orderLinesList
}
json tmpl.orderLines(orderLinesList)
model {
  OrderLine orderLine
}
json {
  id orderLine.id
  description orderLine.description
  ...
}
import com.example.OrderLine

model{
    OrderLine orderLine
}

json{
    id orderLine.id
    description orderLine.description
    ...
}
import com.example.OrderLine

model{
    Iterable<OrderLine> orderLineList
}

json tmpl.orderLine(orderLineList ?: [])
但是我在
orderLine
上得到一个
NullPointerException
,就好像没有从
OrderController
返回
列表一样。当我删除这些视图时,输出返回的结果与预期的一样,尽管它没有按照我希望的方式进行编组


最奇怪的事情:这适用于我的大多数其他观点。我在上找到了很多很好的文档,但似乎没有任何内容能够涵盖这个奇怪的错误。

如果模板名称是
\u orderLines.gson
您应该在
\u orderLines.gson
中重命名模型变量,从
orderLine
orderLines

因此,您的
\u orderLines.gson
模板如下所示

model {
  OrderLine orderLines
}
json {
  id orderLines.id
  description orderLines.description
  ...
}
正如所说

模型变量的名称与模板名称相同


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

使用模板的正确方法应该如下所示:

文件
\u orderLine.gson

model {
  List<OrderLine> orderLinesList
}
json tmpl.orderLines(orderLinesList)
model {
  OrderLine orderLine
}
json {
  id orderLine.id
  description orderLine.description
  ...
}
import com.example.OrderLine

model{
    OrderLine orderLine
}

json{
    id orderLine.id
    description orderLine.description
    ...
}
import com.example.OrderLine

model{
    Iterable<OrderLine> orderLineList
}

json tmpl.orderLine(orderLineList ?: [])
文件
getOrderLines.gson

model {
  List<OrderLine> orderLinesList
}
json tmpl.orderLines(orderLinesList)
model {
  OrderLine orderLine
}
json {
  id orderLine.id
  description orderLine.description
  ...
}
import com.example.OrderLine

model{
    OrderLine orderLine
}

json{
    id orderLine.id
    description orderLine.description
    ...
}
import com.example.OrderLine

model{
    Iterable<OrderLine> orderLineList
}

json tmpl.orderLine(orderLineList ?: [])
import com.example.OrderLine
模型{
Iterable orderLineList
}
json tmpl.orderLine(orderLineList?:[])
注意单数的
orderLineList
not
orderLinesList
,与变量名
orderLine
not
orderLines

正如
sct999
所述,模型变量的名称和使用的模板名称相同。但这只是默认情况。您甚至可以这样明确:


g.render(模板:“”,集合:,变量:“”)

您有两个模板吗?在您的问题中,您指的是_orderLine.gson和_orderLines.gson,哪一个是正确的?将这一个标记为正确的,因为必须将
orderLinesList
更改为
orderLineList
:变量名实际上就是它。啊!花了我太长时间!是否有任何文档显示模型列表参数需要如何命名?我不知道如何命名它们。我认为只有一些小的限制,集合才能自动匹配。如果使用显式调用(如我回答中的最后一个示例代码),则可以根据需要命名参数或变量。