Доступ к элементу detail коллекции внутри раздела в openxava
Как я могу получить доступ к элементу details объекта коллекции, который находится внутри одного раздела другого объекта с помощью openxava? Например, в представлении сущности A у нас есть секция {S1,S2,S3}, а в представлении секции S3 - {коллекция сущности B}. Теперь я хочу получить доступ к элементу detail объекта B, чтобы я мог заполнить этот элемент в контроллере действий. Как я могу это сделать?
3 ответа
Получите коллекцию прямо из представления следующим образом:
Collection myCollection = getView().getSubview("myCollection").getCollectionObjects();
Он должен работать даже с самыми старыми версиями OpenXava
Получите объект, связанный с представлением, и получите коллекцию из него. Начиная с OpenXava 4.3, вы можете сделать это следующим образом:
MyEntity myEntity = (MyEntity) getView().getEntity();
Collection myCollection = myEntity.getMyCollection();
Если вы используете OX до 4.3, сделайте это следующим образом:
Map keyValues = getView().getKeyValuesWithValue();
if (!keyValues.isEmpty()) {
MyEntity myEntity = (MyEntity)
MapFacade.findEntity(getView().getModelName(), keyValues);
Collection myCollection = myEntity.getMyCollection();
}
Вы можете сделать это несколькими способами. Здесь у вас есть один, я использовал его с некоторыми ссылками, которые я хочу изменить изнутри действия, вызываемого базовым модулем (который должен работать с вашей коллекцией):
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 список результатов запроса или что-то в этом роде.
С Уважением,