2013-01-02 28 views
0

如何訪問openxava中另一個實體的一個部分內的集合實體的details元素?例如,在實體A的視圖中,我們有{S1,S2,S3}部分,在部分S3視圖中,我們有{實體B}的集合。現在我想訪問實體B的細節元素,以便我可以將元素填充到操作控制器中。我怎麼做?在openxava中訪問section中的集合的詳細元素

回答

0

你可以用幾種方法做到這一點。在這裏,你有一個,我有一些參考,我想從基礎模塊稱爲操作的內部修改使用它(這應該與你的收集工作):

Query q = XPersistence.getManager().createQuery("JPQL QUERY TO RETRIVE THE COLLECTION WITH :parameterIfNeeded"); 
q.setParameter("parameterIfNeeded", "value"); 
List entityBList = q.getResultList(); 
if (getView().getModelName().equalsIgnoreCase("yourBaseModelViewName")) { 
    getView().getSubview("yourSubViewName").setModel(entityBList); 
    getView().getSubview("yourSubViewName").refresh(); 
} 

你必須要使用OX 4.6能夠使用setModel()。請記住,「yourSubViewName」是您集合到基礎模型中的屬性的名稱。

我還沒有測試集合的代碼,所以根據您的需要進行調整,也許您需要CAST查詢結果列表或其他東西。

問候,

+0

感謝您的快速answer.Since IM由於OpenXava中4.3你可以做這樣使用openxava 3.1,當我嘗試下面的代碼:getView()。getSubview();即時通訊錯誤,我沒有一個子視圖。任何想法???那麼你的代碼如何工作? getView()getSubview( 「entityB_view」)則setModel(enityBlist)。; – user1943998

+0

我從OX版本4.x開始,所以我不知道getView()。getSubview()在舊版本中是否可用。那麼,當你寫下:「我得到錯誤,我沒有子視圖」時,你是什麼意思?......你的意思是.Subview()方法不適用於View類嗎? ...或者你的意思是說你有一個錯誤,說:你試圖訪問的子視圖沒有找到?,如果你的錯誤是我提到的最後一個錯誤,那麼也許是因爲你寫的子視圖的名稱(entityB_view)可能是作爲基本視圖一部分的子部分的名稱,而不是集合的屬性名稱 – HayrolR

+0

因此,請嘗試將「entityB_view」更改爲表示您的基類模型(基本實體)中的集合的屬性的名稱,那是我之前試圖解釋的。我幾乎可以肯定,「entityB_view」不是您的基本實體類(基本模型)中的一個屬性。 – HayrolR

0

直接從視圖中獲取集合,以這樣的方式

Collection myCollection = getView().getSubview("myCollection").getCollectionObjects(); 

它必須與最古老的OpenXava版本

0

即使工作獲得實體相關聯的觀點,並得到從它收集。如果您使用以前的4.3牛做這樣

MyEntity myEntity = (MyEntity) getView().getEntity(); 
Collection myCollection = myEntity.getMyCollection(); 

Map keyValues = getView().getKeyValuesWithValue(); 
if (!keyValues.isEmpty()) { 
    MyEntity myEntity = (MyEntity) 
     MapFacade.findEntity(getView().getModelName(), keyValues); 
    Collection myCollection = myEntity.getMyCollection(); 
}