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.