For example, in the sample page described in Using Input Components in a Page, a command button is bound to the save method in the Account standard controller. We can adapt that previous example so that it now uses the MyController custom controller:
<apex:page controller="MyController" tabStyle="Account"> <apex:form> <apex:pageBlock title="Hello {!$User.FirstName}!"> You are viewing the {!account.name} account. <p/> Change Account Name: <p/> <apex:inputField value="{!account.name}"/> <p/> <apex:commandButton action="{!save}" value="Save New Account Name"/> </apex:pageBlock> </apex:form> </apex:page>
After saving the page above, the Visualforce editor offers a “quick fix” option to add the save method to the MyController class. If you click the quick fix link, MyController now looks like this:
public class MyController { public PageReference save() { return null; } public String getName() { return 'MyController'; } public Account getAccount() { return [select id, name from Account where id = :ApexPages.currentPage().getParameters().get('id')]; } }
The save method that is generated by the quick fix takes the standard signature for an action method: it is public, returns a PageReference, and contains no arguments.
public class MyController { Account account; public PageReference save() { return null; } public String getName() { return 'MyController'; } public Account getAccount() { if(account == null) account = [select id, name, site from Account where id = :ApexPages.currentPage().getParameters().get('id')]; return account; } }
Now that the member variable is in place, all that the save method needs to do is update the database:
public class MyController { Account account; public PageReference save() { update account; return null; } public String getName() { return 'MyController'; } public Account getAccount() { if(account == null) account = [select id, name, site from Account where id = :ApexPages.currentPage().getParameters().get('id')]; return account; } }
A more robust solution for save might catch various exceptions, look for duplicates, and so on. Since this is meant to be a simple example, those details have been left out.
To test this page, change the value in the Change Account Name field and click Save New Account Name. As with the standard Account controller example, the page simply refreshes with the new account name. In the next example, we will extend the save action so that instead of refreshing the current page, it navigates the user to a different confirmation page.