Here i am trying to explain to display the visualforce components from apex class by using DynamicComponent Tag.
On every component we have
Dynamic Visualforce Notation in component reference for example
for <apex:inputField> we have Dynamic Visualforce Notation is Component.Apex.InputField
By using this type of notations i build search page for searching Account records by account name.
By using this we can control the visualforce components from Apex Class.
Controller:
=============
public with sharing class DynamicComponentExample11 {
public DynamicComponentExample11(ApexPages.StandardController con) { }
public string enterstring{get;set;}
public List<Account> lstaccount{get;set;}
public Component.Apex.SectionHeader getHeaderWithDueDateCheck() {
date dueDate = date.newInstance(2011, 7, 4);
boolean overdue = date.today().daysBetween(dueDate) < 0;
Component.Apex.SectionHeader sectionHeader = new Component.Apex.SectionHeader();
if (overdue) {
sectionHeader.title = 'This Form Was Due On ' + dueDate.format() + '!';
return sectionHeader;
} else {
sectionHeader.title = 'Form Submission';
return sectionHeader;
}
}
Public List<Account> getAccounts(){
if(enterstring!=null && enterstring!='')
lstaccount=[select id,name,type,industry from account where name like:enterstring+'%'];
else
lstaccount=[select id,name,type,industry from account];
return lstaccount;
}
public void search1(){
getAccounts();
}
public Component.Apex.PageBlock getpageBlock(){
Component.Apex.PageBlock pb=new Component.Apex.PageBlock();
Component.Apex.PageBlockTable ptable=new Component.Apex.PageBlockTable();
Component.Apex.OutputLabel optlabel=new Component.Apex.OutputLabel();
Component.Apex.CommandButton cmdbtn=new Component.Apex.CommandButton();
cmdbtn.value='Search';
cmdbtn.expressions.action='{!search1}';
optlabel.value='Enter Name';
Component.Apex.Inputtext intext=new Component.Apex.InputText();
intext.id='searchtext';
intext.expressions.value='{!enterstring}';
optlabel.for='intext';
ptable.expressions.value='{!accounts}';
ptable.var='a';
if(enterstring!=null && enterstring!='')
ptable.rendered=true;
else
ptable.rendered=false;
Component.Apex.Column namecolumn=new Component.Apex.Column();
namecolumn.expressions.value='{!a.name}';
Component.Apex.Column industrycolumn=new Component.Apex.Column();
industrycolumn.expressions.value='{!a.Industry}';
Component.Apex.Column typecolumn=new Component.Apex.Column();
typecolumn.expressions.value='{!a.type}';
pb.childcomponents.add(optlabel);
pb.childcomponents.add(intext);
pb.childcomponents.add(cmdbtn);
pb.childcomponents.add(ptable);
ptable.childcomponents.add(namecolumn);
ptable.childcomponents.add(typecolumn);
ptable.childcomponents.add(industrycolumn);
return pb;
}
}
=====================
Visualforce page
============================
<apex:page standardcontroller="Account" extensions="DynamicComponentExample11">
<apex:form >
<apex:dynamicComponent componentValue="{!pageBlock}"/>
</apex:form>
</apex:page>
=======================
Output:
======