Monday, June 1, 2015

Difference between ActionFuction And ActionSupport

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