В этом коротком посте я расскажу о динамических декларативных компонентах 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 . |