Visualforce is primarily intended to be a static, markup-driven language
that lets developers create a user interface that matches the Salesforce look-and-feel.
However, there are occasions when it’s necessary to programmatically
create a page. Usually, this is to achieve complicated user interface
behavior that’s difficult or impossible with standard markup.
Dynamic Visualforce components offer a way to create Visualforce pages that vary the content or arrangement of the component tree
according to a variety of states, such as a user’s permissions
or actions, user or organization preferences, the data being displayed,
and so on. Rather than using standard markup, dynamic Visualforce components are designed in Apex.
Visualforce components that are dynamically represented in
Apex behave like regular classes. Every attribute that exists on a standard
Visualforce component is available as a property in the corresponding
Apex representation with get and set methods. For example, you could
manipulate the
value attribute
on an
<apex:outputText> component as follows:
Component.Apex.OutputText outText = new Component.Apex.OutputText();
outText.value = 'Some dynamic output text.';
Consider using dynamic
Visualforce components in the following scenarios:
- You can use dynamic Visualforce components inside complex control logic to assemble components in
combinations that would be challenging or impossible to create using
equivalent standard Visualforce. For example, with standard Visualforce components, you typically control the visibility of components using
the rendered attribute with
the global IF() formula function.
By writing your control logic in Apex, you can choose to display components dynamically with a more natural
mechanism.
- If you know that you’ll be iterating over objects with
certain fields, but not specifically which objects, dynamic Visualforce components can “plug in” the object representation
by using a generic sObject reference. For more information, see Example Using a Related List.