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