Во второй части покажу как показать данные от программного ViewObject (Programmatic ViewObject), т.е. это VO, но данные он получает не из БД, а например из коллекции.
Прежде надо создать VO типа programmatic
Затем определить его атрибутный состав
После чего будет создан класс в котором надо переопределить несколько методов
Переопределение методов может быть различным, в зависимости от решаемой задачи. В примере ниже будет простая, но вполне реальная реализация.
Основные методы где реализуется логика
Контейнер пользовательских данных
Наполнение данными происходит в getUserRows()
Результат
К этому типу VO можно так же применять и поиск (Query) и др. популярные возможности.
Исходный код
Источник
Using Programmatic View Objects for Alternative Data Sources
http://docs.oracle.com/cd/E24382_01/web.1112/e16182/bcadvvo.htm#sm0341
Прежде надо создать VO типа programmatic
Затем определить его атрибутный состав
После чего будет создан класс в котором надо переопределить несколько методов
public class PgmrVOObjImpl extends ViewObjectImpl { /** * This is the default constructor (do not remove). */ public PgmrVOObjImpl() { } private List<Map<String, Object>> resultRS = new ArrayList<Map<String, Object>>(); /** * executeQueryForCollection - overridden for custom java data source support. */ protected void executeQueryForCollection(Object qc, Object[] params, int noUserParams) { super.executeQueryForCollection(qc, params, noUserParams); } /** * hasNextForCollection - overridden for custom java data source support. */ protected boolean hasNextForCollection(Object qc) { } /** * createRowFromResultSet - overridden for custom java data source support. * Мапирование данных из коллекции на атрибуты VO */ protected ViewRowImpl createRowFromResultSet(Object qc, ResultSet resultSet) { } /** * getQueryHitCount - overridden for custom java data source support. */ public long getQueryHitCount(ViewRowSetImpl viewRowSet) { }
Переопределение методов может быть различным, в зависимости от решаемой задачи. В примере ниже будет простая, но вполне реальная реализация.
Основные методы где реализуется логика
/** * executeQueryForCollection - overridden for custom java data source support. * Подготовить коллецию данных. Вызывается на executeQuery */ protected void executeQueryForCollection(Object qc, Object[] params, int noUserParams) { setUserDataForCollection(qc, new UserCollectionData(getUserRows(params, noUserParams))); super.executeQueryForCollection(qc, params, noUserParams); } /** * createRowFromResultSet - overridden for custom java data source support. * Мапирование данных из user коллекции на атрибуты VO */ protected ViewRowImpl createRowFromResultSet(Object qc, ResultSet resultSet) { UserCollectionData uc = (UserCollectionData)getUserDataForCollection(qc); Iterator<Map<String, Object>> iter = uc.getIterator(); ViewRowImpl vr = null; if (iter.hasNext()) { Map<String, Object> row = iter.next(); vr = createNewRowForCollection(qc); // поля user коллекции for (Object k : row.keySet()) { // атрибут из описания VO AttributeDef attrDef = vr.findAttributeDef((String)k); populateAttributeForRow(vr, attrDef.getIndex(), row.get(k)); } } else { setFetchCompleteForCollection(qc, true); } return vr; }
Контейнер пользовательских данных
public class UserCollectionData { Iterator<Map<String, Object>> iter = null; public UserCollectionData(List<Map<String, Object>> data) { iter = data.iterator(); } public Iterator<Map<String, Object>> getIterator() { return iter; } }
Наполнение данными происходит в getUserRows()
/** * Получить данные для RS * @param params - параметры для условия Where * @param noUserParams - * @return */ protected List<Map<String, Object>> getUserRows(Object[] params, int noUserParams) { Map<String, Object> map; // первая запись map = new HashMap<String, Object>(); map.put("IdPgmr", Integer.valueOf(1)); map.put("FirstName", "Alexander"); map.put("LastName", "Rylkov"); resultRS.add(map); // вторая
. . . . . . return resultRS; }
Результат
К этому типу VO можно так же применять и поиск (Query) и др. популярные возможности.
Исходный код
Источник
Using Programmatic View Objects for Alternative Data Sources
http://docs.oracle.com/cd/E24382_01/web.1112/e16182/bcadvvo.htm#sm0341
Комментариев нет:
Отправить комментарий