您好 我正在尝试为播放应用程序的CRUD部分自定义list.html视图。
我的模特就像这样
我有一个与其他对象有关系的对象,如下所示:
@Entity
public class MyObjectA extends Model {
@Required
public String myObjectAName;
...
@Required
@ManyToOne
public MyObjectB myObjectB;
}
现在在我覆盖的list.html中,我有这个
<div id="crudListTable">
#{crud.table fields:['myObjectB', 'myObjectAName'] /}
</div>
现在,在浏览器中调用以下网址http://myplayapp/admin/myObjectAs时,此代码会显示如下内容
myObjectB _ _ myObjectAName
MyObjectB [1] _ _ 以下是myObjectAName的名称
MyObjectB [2] _ _ 嘿这是myObjectAName的另一个名字
请注意在MyObjectB的[]中使用对象名称和对象ID。
所以要在上面的列表中显示MyObjectB的myObjectBName属性,我试试这个:
<div id="crudListTable">
#{crud.table fields:['myObjectB.myObjectBName', 'myObjectAName'] /}
</div>
但后来我收到了这个错误
模板{module:crud} /app/views/tags/crud/table.html中发生执行错误。 &gt;引发的异常是MissingPropertyException:没有这样的属性:myObjectB.myObjectBName&gt; for class:models.MyObjectA。
当然MyObjectB有一个公共属性myObjectBName
那我在这里做错了什么?
答案 0 :(得分:7)
它不起作用,因为fields
参数只显示要显示的类的字段名称列表(此处为MyObjectA
),而"myObjectB.myObjectBName"
不是字段中的字段名称MyObjectA
。
有两种方法可以做到这一点:
简单的解决方案是覆盖toString()
的{{1}}方法。这样做的缺点是,每次显示MyObjectB
时都会使用相同的字符串,这可能不是您想要的。
示例:
MyObjectB
列表特定解决方案是使用crud.custom
tag。
示例:
public class MyObjectB extends Model {
// ...
@Override
public String toString(() {
return this.myObjectBName;
}
}