суббота, 18 января 2014 г.

26й - практикум. Коллекции для обработки в af:forEach и af:iterator

Если интерфейс кажется уже стандартным, а его форму хочется все таки изменить и предать динамичности, то тут могут помочь af:forEach и af:iterator. Но хочется прояснить вопрос по каким коллекциям их можно строить и вообще какие есть?

Примеры подготовлены на Oracle XE схема HR

Прежде всего интересуют коллекции которое можно получить из bindings для ViewObject  (VO) 

Вот некоторые из них и информация какая коллекция подходит для компоненты.





forEach
iterator
rangeSet
Х
Х
collectionModel

Х
children
Х
Х
attributeDefs

Х


attributeDefs - позволит просмотреть мета описание атрибутов, тип данных, имя, поле в БД и др. информацию доступную из AttributeDef
collectionModel, children, rangeSet - значения атрибутов.
Из этих трех коллекций хочется выделить rangeSet. Эта коллекция позволяет также пройти по значениям атрибутов, но при этом находясь на определенной позиции в наборе, получить еще коллекцию значений всех атрибутов в строке с помощью свойства attributeValues. Таким образом двигаясь по коллекции вниз, можно посмотреть остальные атрибуты в строке.

Вот этот пример:
            <af:forEach items="#{bindings.EMPLOYEES1.rangeSet}" var="var" begin="0" end="1">
              <af:outputLabel value="#{var.FirstName}" id="ol6" inlineStyle="font-weight:bold;"/>
              <af:forEach items="#{var.attributeValues}" var="row">
                <af:outputText value="#{row}" id="ot2" inlineStyle="padding:0px 10px 0px;"/>
              </af:forEach>
            </af:forEach>



Подготовить VO для работы с ним в операторах, можно добавив его как tree в bindings страницы pageDef. Это эквивалентно действию по размещению таблицы (table) на странице. Можно было бы добавить таблицу, а затем ее вырезать (cut), при этом сохранив binding.


Настроить те атрибуты к которым нужен будет доступ из итераторов.


С помощью af:iterator можно можно пройтись по отношению Master/Detail и отобразить его.
Надо подготовить ViewLink для отношения и далее в bindings подготовить tree.

Настроить атрибуты для Master и  Detail. Далее используя два iterator -а показать отношение.

<af:iterator id="i3" value="#{bindings.DEPARTMENTS1.collectionModel}" var="dep">
              <af:outputLabel value="#{dep.DepartmentName}" id="ol5"/>
              <af:iterator id="i4" value="#{dep.EMPLOYEES}" var="emp">
                <af:outputText value="#{emp.FirstName}#{', '}#{emp.LastName}" id="ot1"/>
              </af:iterator>
</af:iterator>
 
Первый итератор идет по Отделам, а второй по сотрудникам используя вот такое обращение
<af:iterator id="i4" value="#{dep.EMPLOYEES}" var="emp">


Вот примеры работы с коллекциями.

- Описание атрибутов (attributeDefs)

- Просмотр вниз по записям и вправо по атрибутам (rangeSet и attributeValues)

- Master/Detail (collectionModel)



- Пример использования для UI. Собственно это и есть, то с чего я начал, с не "обычного интерфейса". Выбрав сотрудника получаем по нему дополнительную информация. Без использования java кодирования, и всего один простой VO.


Источник
Oracle ADF Binding Properties

Исходники

Комментариев нет:

Отправить комментарий