Доступ к элементу 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 список результатов запроса или что-то в этом роде.

С Уважением,

Другие вопросы по тегам