2012-06-05 63 views
2

我在玩2項目得到了這兩個車型:如何存取權限嵌套模型的屬性在播放2個模板

@Entity 
public class Site extends Model{ 

    @Id 
    public String adId; 

    @Required 
    public String name; 

    @Required 
    @OneToMany (cascade = CascadeType.ALL) 
    public List<Room> rooms; 
... 
}//end of class 

@Entity 
public class Room extends Model { 

    @Id 
    @Required 
    public String adId; 

    @Required 
    public String name; 

    public List<Reservation> reservations = new ArrayList<Reservation>(); 

... 
} 

當我使用在我看來這個代碼。 scala.html

  var treeData = [        
        @for(site <- sites) { 
         {title: "@site.name", tooltip: "@site.adId", 
          children: [ 
           @for(room <- site.rooms) { 
            {title: "@room.name", tooltip: "@room.adId"}, 
           } 
          ] 
         }, 
        } 
       ]; 

我無法存取權限site.rooms 如果我測試它在服務器端,d ata存在。

另一個奇怪的事情是,我得到site.adId,但site.name保持爲空...

如果有人知道我做錯了什麼......

(對不起,我英文不好,這不是我的母語)。

+0

奇怪,長相普通。我假設你沒有重寫你的模型中的任何getter,如果是這樣的話,可以用'@ site.getName()'代替。另一方面,您不需要在模板中格式化數組我認爲在控制器中使用Json序列化程序並將其作爲JsonNode類型的單個變量傳遞給模板會更好。用scala標記問題並顯示Ebean模型,那麼您是使用Scala還是Java控制器? – biesior

回答

2

您需要獲取數據以便在模板/ scala中訪問數據。至少這是爲我解決了這個問題。我想我發現mailinglist上的信息:

這個問題已經在前面討論過了。如果您想使用Scala代碼中的Ebean惰性加載(或任何其他Java魔術),您必須使用私有字段和公共訪問方法。

+2

將字段設置爲私有不是強制性的,但使用getters/setter可以解決問題。謝謝 ! – user1436773

+1

很高興知道,謝謝。但我認爲它的良好做法要麼宣佈這些字段是私人的,而是要使用getter/setter或將它們公開。這種方式較少混淆。 – msung

0

或查詢中獲取數據:finder.fetch("rooms")query().findList()

+0

雖然這將解決問題,但我認爲這不是最好的方法。如果我正確理解了這一點,就必須考慮在視圖中可能想要輸出的每個字段(這是乏味和容易出錯的,因爲在編譯時您不會看到這些錯誤),或者只是獲取每列(可能會變得非常慢,並且與Ebeans的主要目標之一相互作用,而不必通過延遲加載/部分對象獲取太多數據)。 – msung