В этом коротком посте я расскажу о динамических декларативных компонентах ADF. Я имею в виду известный тэг ADF af: DeclarativeComponent . Его можно использовать как довольно удобный способ оформления страницы как композиции фрагментов и компонентов страницы. Например, наша страница может содержать следующий фрагмент кода:
|
1
2
3
4
5
|
<af:declarativeComponent viewId="PageFragment.jsff" id="dc1"> <f:facet name="TheFacet"> <af:button text="button 1" id="b1"/> </f:facet> </af:declarativeComponent> |
И PageFragment.jsff — это обычный фрагмент страницы, подобный этому:
|
01
02
03
04
05
06
07
08
09
10
|
<?xml version='1.0' encoding='UTF-8'?> <af:panelGroupLayout id="pgl1"> <af:outputText value="This is a page fragment. You can add your content to the following facet:" id="ot1"/> <af:facetRef facetName="TheFacet"/> </af:panelGroupLayout></jsp:root> |
Если нам нужно передать некоторые параметры фрагменту страницы, мы можем определить этот фрагмент как компонент:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
<?xml version='1.0' encoding='UTF-8'?><af:componentDef var="attrs"> <af:xmlContent> <facet> <facet-name>TheFacet</facet-name> </facet> <attribute> <attribute-name>Title</attribute-name> </attribute> </component> </af:xmlContent> <af:panelGroupLayout id="pgl1"> <af:outputText value="This is a component #{attrs.Title}. You can add your content to the following facet:" id="ot1"/> <af:facetRef facetName="TheFacet"/> </af:panelGroupLayout> </af:componentDef> </jsp:root> |
В этом примере мы можем передать значение атрибута Title, как показано в следующем фрагменте кода:
|
1
2
3
4
5
6
7
|
<af:declarativeComponent viewId="ComponentFragment.jsff" id="dc2" Title="Buttom Container"> <f:facet name="TheFacet"> <af:button text="button 2" id="b2"/> </f:facet> </af:declarativeComponent> |
И самое интересное в этой технике — атрибут viewId может принимать не только статические строки, но и выражения EL:
|
1
2
3
4
5
6
|
<af:declarativeComponent viewId="#{TheBean.fragmentViewID}" id="dc1"> <f:facet name="TheFacet"> <af:button text="button 1" id="b1"/> </f:facet> </af:declarativeComponent> |
|
1
2
3
|
public String getFragmentViewID() { return "PageFragment.jsff";} |
Именно поэтому эта конструкция называется динамической , и именно поэтому эту функцию можно рассматривать как мощный инструмент для построения хорошо структурированного, гибкого и динамического пользовательского интерфейса.
Это оно!
| Ссылка: | Действительно динамичные декларативные компоненты от нашего партнера по JCG Евгения Федоренко в блоге ADF Practice . |