Grails视图认为模型为空
我有一个Grails3应用程序,我正试图使用一个视图将控制器的输出整理成一种特定的格式。我添加两种观点:1。与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
视图/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
notorderLinesList
,与变量名orderLine
notorderLines
正如sct999
所述,模型变量的名称和使用的模板名称相同。但这只是默认情况。您甚至可以这样明确:
g.render(模板:“”,集合:,变量:“”)
您有两个模板吗?在您的问题中,您指的是_orderLine.gson和_orderLines.gson,哪一个是正确的?将这一个标记为正确的,因为必须将orderLinesList
更改为orderLineList
:变量名实际上就是它。啊!花了我太长时间!是否有任何文档显示模型列表参数需要如何命名?我不知道如何命名它们。我认为只有一些小的限制,集合才能自动匹配。如果使用显式调用(如我回答中的最后一个示例代码),则可以根据需要命名参数或变量。