我们花了几天时间试图解决这个问题,但我们不能这样做,所以我们决定在这里提出你的意见。
我们有以下问题。 我们有一个集合,它返回一个JSON数据。
下面的代码将呈现一个表和一个子网格表。在父表中我们已经 找到一些好的数据。但是在子网格表中我们无法加载任何内容。
我们做错了什么?
{
"sales":[
{
"client":{
"id":1,
"name":"Jon Doe",
"phone":"35900022233"
},
"goods":[
{
"description":"Good Description",
"id":3,
"name":"Good name",
"price":10.0
},
{
"description":"Good Description 2",
"id":2,
"name":"Good name 2",
"price":1.87
},
{
"description":"Good Description 3",
"id":1,
"name":"Good name 3",
"price":2.5
}
]
}
<sjg:grid
id="salesTable"
caption="Sales List"
dataType="json"
href="%{sales}"
pager="true"
gridModel="sales"
rowList="10,15,20"
rowNum="15"
rownumbers="true"
width="900"
shrinkToFit="true"
viewrecords="true"
>
<sjg:grid
id="goodssubgridtable"
caption="Goods"
dataType="json"
subGridUrl="%{sales}"
gridModel="goods"
width="true"
shrinkToFit="false"
>
<sjg:gridColumn name="name" title="Name" />
<sjg:gridColumn name="description" title="Description" />
<sjg:gridColumn name="price" title="Price" />
</sjg:grid>
<sjg:gridColumn name="id" index="id" width="50" title="ID" sortable="false"/>
<sjg:gridColumn name="quantity" index="quantity" width="200" title="Quantity" sortable="false" />
<sjg:gridColumn name="totalAmount" index="totalAmount" width="300" title="Total amount" sortable="false" />
<sjg:gridColumn name="client.id" title="Client ID" width="100"/>
<sjg:gridColumn name="client.name" title="Client name" />
<sjg:gridColumn name="client.phone" title="Phone number" />
答案 0 :(得分:0)
由于Goods
不在返回的对象的根目录中,因此您应该在表示法中使用正确的路径,例如gridModel="sales[0].goods"
。
有关如何遍历JSON对象的更多详细信息,请参阅this amazing answer。
编辑:你在这里发布的JSON似乎格式不正确,但它可能只是一个副本&amp;粘贴问题;但是,尝试使用硬编码索引;如果它有效,你应该,如果可能的话,得到要通过OGNL的行的索引,因为你不在iterator
内,而是在自定义标记内:/
但是看the official Showcase's source code,它以完全不同的方式完成:两个不同的URL指向Grid和subGrid的两个不同的Actions。我认为这就是它的用途。如果您需要检查他们执行的业务,请浏览存储库以查找操作