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