2011-05-04 36 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