Статьи

Пример декларативного компонента ADF

В моем предыдущем посте я обещал показать, как создать декларативный компонент ADF для интеллектуального списка значений. Итак, я собираюсь создать компонент, состоящий из трех элементов: метки, входного текста и списка значений комбинированного списка. Это очень просто. Я создал отдельный проект ADF ViewController в моей рабочей области:


В этом проекте откройте мастер создания декларативного компонента JSF:

Новый декларативный компонент smartLovDef должен иметь как минимум три атрибута: некоторую строку для метки, привязку атрибута для входного текста и привязку LOV для списка значений комбинированного списка:

Мастер создает файл метаданных декларативного comp-metadata.xml и файл smartLovDef.jspx, в который мы можем поместить содержимое нашего компонента:

Исходный код smartLovDef.jspx выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
  <jsp:directive.page contentType="text/html;charset=UTF-8"/>
  <af:componentDef var="attrs" componentVar="component">
         
 <af:panelLabelAndMessage label="#{attrs.label}" id="plam1">
  <af:panelGroupLayout id="pgl1" layout="horizontal">
    <af:inputText value="#{attrs.attrBinding.inputValue}"
                  required="#{attrs.attrBinding.hints.mandatory}"
                  columns="#{attrs.attrBinding.hints.displayWidth}"
                  id="deptid" partialTriggers="departmentNameId"
                 autoSubmit="true" simple="true"/>
    <af:inputComboboxListOfValues id="departmentNameId"
                popupTitle="Search and Select: #{attrs.lovBinding.hints.label}"
                value="#{attrs.lovBinding.inputValue}"
                model="#{attrs.lovBinding.listOfValuesModel}"
                columns="#{attrs.lovBinding.hints.displayWidth}"
                shortDesc="#{attrs.lovBinding.hints.tooltip}"
                partialTriggers="deptid"
               simple="true">
    </af:inputComboboxListOfValues>
  </af:panelGroupLayout>
 </af:panelLabelAndMessage>
 
    <af:xmlContent>
      <component xmlns="http://xmlns.oracle.com/adf/faces/rich/component">
        <display-name>smartLovDef</display-name>
        <attribute>
          <attribute-name>label</attribute-name>
          <attribute-class>java.lang.String</attribute-class>
          <required>true</required>
        </attribute>
        <attribute>
          <attribute-name>attrBinding</attribute-name>
          <attribute-class>java.lang.Object</attribute-class>
          <required>true</required>
        </attribute>
        <attribute>
          <attribute-name>lovBinding</attribute-name>
          <attribute-class>java.lang.Object</attribute-class>
          <required>true</required>
        </attribute>
        <component-extension>
          <component-tag-namespace>cscomponent</component-tag-namespace>
          <component-taglib-uri>/componentLib</component-taglib-uri>
        </component-extension>
      </component>
    </af:xmlContent>
  </af:componentDef>
</jsp:root>

Следующим шагом является развертывание компонента в библиотеке ADF. Мы должны добавить новый профиль развертывания для проекта CSComponents:

И давайте развернем проект в библиотеке:

Следующим шагом является определение подключения файловой системы в палитре ресурсов к пути развертывания проекта CSComponents:

После этого нам нужно выбрать проект, в котором мы собираемся использовать новый компонент (в моем случае ViewConroller) и добавить к нему библиотеку CSComponents.jar:

Теперь мы можем использовать компонент smartLovDef на нашей странице и перетащить его из палитры компонентов:

На нашей странице jspx исходный код будет выглядеть так:

1
2
3
4
    <cscompLib:smartLovDef label="#{bindings.DepartmentId.label}"
                        attrBinding="#{bindings.DepartmentId}"
                        lovBinding="#{bindings.DepartmentName}"
                        id="sld1"/>

Ссылка: пример декларативного компонента ADF от нашего партнера JCG