Creating a Wizard using visual force and apex in sales force

Visalforce page :

<apex:page controller="newOpportunityController" tabStyle="Opportunity">
  function confirmCancel() {
      var isCancel = confirm("Are you sure you wish to cancel?");
      if (isCancel) return true;
     return false;
  <apex:sectionHeader title="New Customer Opportunity" subtitle="Step 1 of 3"/>
      <apex:pageBlock title="Customer Information" mode="edit">

        <!-- The pageBlockButtons tag defines the buttons that appear at the top
             and bottom of the pageBlock. Like a facet, it can appear anywhere in
             a pageBlock, but always defines the button areas.-->
        <!-- The Next button contained in this pageBlockButtons area
             calls the step2 controller method, which returns a pageReference to
             the next step of the wizard. -->
          <apex:commandButton action="{!step2}" value="Next"/>
          <apex:commandButton action="{!cancel}" value="Cancel" 
                              onclick="return confirmCancel()" immediate="true"/>
      <apex:pageBlockSection title="Account Information">

        <!-- Within a pageBlockSection, inputFields always display with their
             corresponding output label. -->
        <apex:inputField id="accountName" value="{!}"/>
        <apex:inputField id="accountSite" value="{!}"/>
      <apex:pageBlockSection title="Contact Information">
        <apex:inputField id="contactFirstName" value="{!contact.firstName}"/>
        <apex:inputField id="contactLastName" value="{!contact.lastName}"/>
        <apex:inputField id="contactPhone" value="{!}"/>




public class newOpportunityController {
   Account account;
   Contact contact;
   Opportunity opportunity;
   OpportunityContactRole role;
   public Account getAccount() {
      if(account == null) account = new Account();
      return account;

   public Contact getContact() {
      if(contact == null) contact = new Contact();
      return contact;

   public Opportunity getOpportunity() {
      if(opportunity == null) opportunity = new Opportunity();
      return opportunity;

   public OpportunityContactRole getRole() {
      if(role == null) role = new OpportunityContactRole();
      return role;
   public PageReference step1() {
      return Page.opptyStep1;

   public PageReference step2() {
      return Page.opptyStep2;

   public PageReference step3() {
      return Page.opptyStep3;

   // This method cancels the wizard, and returns the user to the 
   // Opportunities tab
    public PageReference cancel() {
			PageReference opportunityPage = new ApexPages.StandardController(opportunity).view();
			return opportunityPage; 

   // This method performs the final save for all four objects, and
   // then navigates the user to the detail page for the new
   // opportunity.
   public PageReference save() {

      // Create the account. Before inserting, copy the contact's
      // phone number into the account phone number field. =;
      insert account;

      // Create the contact. Before inserting, use the id field
      // that's created once the account is inserted to create
      // the relationship between the contact and the account.
      contact.accountId =;
      insert contact;

      // Create the opportunity. Before inserting, create 
      // another relationship with the account.
      opportunity.accountId =;
      insert opportunity;

      // Create the junction contact role between the opportunity
      // and the contact.
      role.opportunityId =;
      role.contactId =;
      insert role;

      // Finally, send the user to the detail page for 
      // the new opportunity.

      PageReference opptyPage = new ApexPages.StandardController(opportunity).view();

      return opptyPage;