In this short post I am going to focus on ADF dynamic declarative components. I mean a well known ADF tag af:declarativeComponent. It can be used as a pretty convenient way to design a page as a composition of page fragments and components. For example, our page can contain the following code snippet:
In this example we can pass the value of the Title attribute as it is shown in this code snippet:
That's it!
<af:declarativeComponent viewId="PageFragment.jsff" id="dc1"> <f:facet name="TheFacet"> <af:button text="button 1" id="b1"/> </f:facet> </af:declarativeComponent>And the PageFragment.jsff is a usual page fragment like this one:
<?xml version='1.0' encoding='UTF-8'?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:af="http://xmlns.oracle.com/adf/faces/rich"> <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>If we need to be able to pass some parameters to a page fragment, we can define the fragment as a component:
<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
<af:componentDef var="attrs">
<af:xmlContent>
<component xmlns="http://xmlns.oracle.com/adf/faces/rich/component">
<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>
In this example we can pass the value of the Title attribute as it is shown in this code snippet:
<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>And the most cool thing about this technique is that viewId attribute can accept not only static strings, but EL expressions as well:
<af:declarativeComponent viewId="#{TheBean.fragmentViewID}"
id="dc1">
<f:facet name="TheFacet">
<af:button text="button 1" id="b1"/>
</f:facet>
</af:declarativeComponent>
public String getFragmentViewID() {
return "PageFragment.jsff";
}
Actually that's why this construction is called dynamic, and that's why this feature can be considered as a powerful tool for building well structured, flexible and dynamic UI.That's it!
No comments:
Post a Comment
Post Comment