Controladores de una Visualforce Page

Comparte la información a tus amigos

Los Controladores de una Visualforce Page son la parte lógica que debemos conocer para crear y manejar aplicaciones de calidad.

Tipos de Controladores

Controladores Estándar

  • Los controladores estándar son utilizados para gestionar objetos personalizados y por defecto.
  • Contiene la funcionalidad y la lógica utilizada por las páginas estándar de Salesforce (standard Salesforce pages).
  • Se incluyen en la etiqueta apex:page de la siguiente manera: <apex:page standardController=”Account”>
  • Se pueden acceder a sus valores mediante force.com API como {! Account.Name }
<!-- Visualforce Page Example -->
<apex:page standardController="Account">
  Name: {! Account.Name }
</apex:page>

Controladores Personalizados

  • Pueden ser utilizados para sobrescribir funcionalidad, navegación y llamadas a web services.
  • Utiliza su constructor por defecto, sin argumentos, es decir, sin parámetros.
  • Los métodos de un controlador estándar pueden ser getters, setters y acciones.
//MyCustom Controller
public class MyCustomController {
    Account acc;
    
    public MyCustomController () {
      acc = [SELECT Id, Name FROM Account
               WHERE Id =: ApexPages.currentPage().getParameters().get('id')];    
    }
    
    public Account getAccount () {
      return acc;
    }
}
<!-- Visualforce page -->
<apex:page controller="MyCustomController">
  <apex:pageBlock>
    <apex:pageBlockSection>
      <apex:pageBlockTable value="{! account }" var="acc">
        <apex:column value="{! acc.Id }" />
        <apex:column value="{! acc.Name }"/>
      </apex:pageBlockTable>
    </apex:pageBlockSection>
  </apex:pageBlock>
</apex:page>

Métodos Getter

  • Cada valor calculado y por mostrar en una visualforce page debe tener un método getter en el controlador.
  • Los nombre de los métodos getter deben tener siempre el prefijo get en el inicio. Por ejemplo: getAccounts.
  • Con el markup {! nombre_de_expresion } se puede conectar automáticamente una visualforce page con el método getter. Por Ejemplo: {! accounts } se conecta con el método getter getAccounts.
  • Los métodos getter no tienen parámetros pero si deben retornar un objeto.
  • Deben tener por lo menos un nivel de acceso público (Public access level).
  • Un método getter es requerido para acceder a los datos de un objeto desde un controlador a una visualforce page.
  • Un método getter puede obtener datos utilizando consultas SOQL.
//Getter example code
public class MyCustomController {
  Account acc;
  
  public Account getAccount () {
    return acc;
  }
}

Métodos Setter

  • Son utilizados para enviar datos desde una visualforce page hacia el controlador.
  • Los métodos setter no son requeridos.
  • Estos métodos son ejecutados automáticamente antes de los métodos acciones.
  • Su nombre deben empezar con el prefijo set. Por ejemplo: setVariable, el valor de variable debe ser obtenido desde una visualforce page.
  • Deben tener por lo menos un nivel de acceso público.
  • El método setter tiene un parámetro y no retorna ningún valor.
//Setter example code
public class MyCustomController {
  Account acc;
  String accountName;
    
  public Account getAccount () {
    acc = [SELECT Id, Name FROM Account 
              WHERE Id =: ApexPages.currentPage().getParameters().get('id')];
    return acc;
  }

  public String getAccountName () {
    return accountName;
  }
  //Setter Method
  public void setAccountName(String value) {
    accountName = value;
  }
  
  public PageReference save () {
    acc.Name = accountName;
    update acc;
    return null;
  }
}
<!-- Setter visualforce page example -->
<apex:page controller="MyCustomController">
  <apex:form>
    <apex:outputLabel value="Enter account: " />
    <apex:inputText value="{!accountName}" />
    <apex:commandButton value="Save" action="{!Save}" /> <p/>
    <apex:outputText value="Account Name entered: {!accountName}" />
  </apex:form>
</apex:page>

Propiedades para utilizar métodos Getter y Setter

  • Podemos representar un método get y set con los sentencias get y set. Por ejemplo: public dataType propertyName {get; set;}
  • Si una propiedad tiene una única sentencia get, es de sólo lectura.
  • Si una propiedad tiene una única sentencia set, es de sólo escritura.
  • Las propiedades con sentencias get y set son consideradas de lectura y escritura.
public class MyCustomController {

  public Account acc {get; set;}

  public String accountName {get; set;}

  public String accountPhoneNumber {get;}

  public String accountFile {set;}
  
}

Extensiones de Controladores

Las extensiones de controladores son clases en Apex que pueden extender la funcionalidad de controladores estándares o personalizados.

  • Podemos llamar a una extensión de controladores utilizando la palabra clave extension en la etiqueta <apex:page> de nuestra visualforce page.
  • Se pueden utilizar múltiples extensiones de controladores en una visualforce page separándolos por comas.
  • Deben tener un constructor con un sólo argumento del tipo ApexPages.StandardController para inicializar sus valores.
public class MyControllerExtension {

  private final Account acc;

  public MyControllerExtension(ApexPages.StandardController stdController) {
    this.acc = (Account)stdController.getRecord();
  }

  public String getGreeting () {
    return 'This is a greeting message for: ' + this.acc.Name;
  }
  
}
<apex:page standardController="Account" extensions="MyControllerExtension">
  <h2>{!greeting}</h2>
  <p>
    <apex:form>
      <p><apex:inputField value="{!account.name}"/></p>
      <apex:commandButton value="Save" action="{!save}"/>
    </apex:form>
  </p>
</apex:page>
Visualforce page result

Para saber más sobre Controladores, Getters y Setters puedes ir a:

Para saber más sobre Salesforce:

Comparte la información a tus amigos

7 Comments

  1. Pretty great post. I simply stumbled
    upon your weblog and wished to say
    that I’ve really loved surfing around your blog
    posts. After all I’ll be subscribing to your feed and I’m hoping
    you write again very soon!

    Visit my web site website

  2. Having read this I believed it was rather informative.

    I appreciate you finding the time and effort to put this content
    together.
    I once again find myself spending a lot of time both reading and posting comments.

    But so what, it was still worthwhile!

    Feel free to surf to my webpage click here, Zak,

  3. I think this is one of the most important information for
    me.
    And I’m glad reading your article. But wanna remark on few
    general things,
    The site style is perfect,
    the articles is really great
    : D. Good job, cheers

    Here is my blog post … click here (Pedro)

  4. Wonderful site. A lot of helpful info here. I am sending it to a few friends ans additionally sharing in delicious.

    And of course, thank you to your effort!

    Also visit my website Ariel Degraves