Difference between ActionFuction And ActionSupport
Visualforce provides three great components to call
controller methods they are ActionPoller, ActionFuction & ActionSupport. Among
these three components ActionFuction & ActionSupport are very similar and
in most of cases can be used interchangeably. Following is example of same.
VF1– Action Function
=================================
<apex:page controller="exampleCon">
<p><apex:outputText
value="Clicked? {!state}" id="showstate"
/></p>
<apex:outputPanel
onclick="methodOneInJavascript()" styleClass="btn">
Click Me </apex:outputPanel>
<apex:form
>
<apex:actionFunction
action="{!methodOne}" name="methodOneInJavascript"
rerender="showstate">
<apex:param
name="firstParam" assignTo="{!state}" value=""
/>
</apex:actionFunction>
</apex:form>
</apex:page>
VF2 – Action Support
=================================
<apex:page controller="exampleCon">
<apex:form>
<p><apex:outputText
value="Clicked? {!state}" id="showstate"
/></p>
<apex:outputPanel
styleClass="btn"> Click Me
<apex:actionSupport
event="onclick" action="{!method2}"
rerender="showstate">
<apex:param
name="firstParam" value="Yes" />
</apex:actionSupport>
</apex:outputPanel>
</apex:form>
</apex:page>
Controller
=================================
public class exampleCon {
private String state = 'no';
public void setState(String n)
{
state = n;
}
public String getState() {
return state;
}
public PageReference methodOne() {
return null;
}
public PageReference method2() {
state =
ApexPages.CurrentPage().getParameters().get('firstParam');
return null;
}
}
As you can see I can use both
Action fiction and Action support to archive the same functionality. So the question is they truly interchange?
Well the answer is No!
When should I use Action Function
and when to use Action support?
When you want to add ACTION to any
(single) apex component then you should use Action support
When there multiple components
which needs to call controller action then you should use Action Function.
Why?
The reason lies in the
background implementation. When you define Action Support in your VF it generates
AJAX code with function name that call controller method. If you use this in loop
(repeat) this defines multiple JS function with same name which throws error in
JS and your page do not work properly.
In Case of Action Function it is
defined at one place and can be called from many places. So if you have loop (repeat)
in your code then calling code can be repeated in loop and that is why Action Function
should be used with Repeat.
No comments:
Post a Comment