2011-05-04 35 views
3

您好 我想自定义播放应用程序的CRUD部分list.html视图。定制CRUD list.html在PlayFramework

我的模型是这样的

我有一个对象有关系的其他对象,像这样:在我overwride我有这个

<div id="crudListTable"> 
    #{crud.table fields:['myObjectB', 'myObjectAName'] /} 
</div> 
的list.html

@Entity 
public class MyObjectA extends Model { 

    @Required 
    public String myObjectAName; 

    ... 

    @Required 
    @ManyToOne 
    public MyObjectB myObjectB; 
} 

现在

现在,在浏览器中调用以下URL http://myplayapp/admin/myObjectAs时,将显示如下代码

myObjectB _ _ myObjectAName

MyObjectB [1] _ _嘿此为myObjectAName
名称MyObjectB [2] _ _嘿这是myObjectAName

另一个名称

注意使用对象的名称和[]中的对象ID为我MyObjectB。

所以要在列表中显示MyObjectB的myObjectBName性能上面,我试试这个:

<div id="crudListTable"> 
    #{crud.table fields:['myObjectB.myObjectBName', 'myObjectAName'] /} 
</div> 

但后来我得到这个错误在模板发生

执行错误{模块:CRUD} /app/views/tags/crud/table.html。 >提出的例外是MissingPropertyException:没有这样的属性:myObjectB.myObjectBName>类:models.MyObjectA。

当然MyObjectB有一个公共属性myObjectBName

那我错在这里做什么?

回答

7

它不工作,因为fields参数只是需要在类的字段名称的列表中显示(这里MyObjectA)和"myObjectB.myObjectBName"不是MyObjectA一个字段的名称。

有两种方法可以做到这一点:

简单的解决方案是重写的MyObjectBtoString()方法。这有一个缺点,即相同的字符串everywere使用MyObjectB显示,这可能不是你想要的。

实施例:

public class MyObjectB extends Model { 

    // ... 

    @Override 
    public String toString(() { 
    return this.myObjectBName; 
    } 

} 

列表specifc溶液是使用crud.custom tag

例子:

#{crud.table fields:['myObjectB', 'myObjectAName']} 
    #{crud.custom 'myObjectB'} 
     ${object.myObjectB.myObjectBName} 
    #{/crud.custom} 
#{/crud.table} 
+1

谢谢RoToRa! crud.custom标签正是我所需要的 – Alain 2011-05-04 13:01:25