terça-feira, 2 de maio de 2017

Desabilitando/Habilitando campo apex:InputField em páginas Visualforce

Há algum tempo esbarrei em uma situação inusitada. Estava utilizando um campo <apex:InputField /> no Visualforce da Salesforce e queria desabilitar esse campo, de acordo com uma situação vinda da minha classe Apex controller. Fui procurar a propriedade Disabled ou Enabled e não encontrei! Afinal, esse atributo não existe no apex:InputField.

Então resolvi essa situação de uma forma diferente. Comecei a trabalhar com dois componentes na tela: O apex:InputField quando eu necessitava do dele Habilitado e o apex:OutputField quando precisava dele desabilitado.

Dessa forma, veja um exemplo simples da minha classe controller:


 public class DesabilitandoInputFieldController {  
   public boolean habilitado { get; set; }  
   public Account conta { get; set; }  
   public DesabilitandoInputFieldController(){  
     this.habilitado = true;  
     this.conta = new Account();  
     this.conta.Industry = 'Technology';  
   }  
   public PageReference AlteraHabilitado() {  
     this.habilitado = !this.habilitado;  
     return null;  
   }  
 }  

Veja que foi criado uma propriedade na classe controller, chamado "habilitado" que é usado para dizer se o apex:InputField estará Habilitado ou Desabilitado. Foi construído também um método para realizar a habilitação/desabilitação do campo.

Agora veja minha página Visualforce:


 <apex:page controller="DesabilitandoInputFieldController">  
   <apex:form >  
   <apex:PageBlock >  
     <apex:pageBlockButtons >  
       <apex:commandButton action="{!AlteraHabilitado}" value="Alterar visibilidade!"/>  
     </apex:pageBlockButtons>  
     <apex:PageBlockSection >  
       <apex:PageBlockSectionItem>  
         <apex:OutputLabel value="Conta"></apex:OutputLabel>  
         <apex:outputPanel>  
           <apex:InputField value="{!conta.Industry}" rendered="{!habilitado}"/>  
           <apex:OutputField value="{!conta.Industry}" rendered="{!NOT(habilitado)}"/>  
         </apex:outputPanel>          
       </apex:PageBlockSectionItem>  
     </apex:PageBlockSection>  
   </apex:PageBlock>  
   </apex:form>  
 </apex:page>  


Perceba que foi colocado dentro do Apex:OutputPanel um apex:InputField e apex:OutputField. Com o rendered nesses componentes, consigo exibir um ao mesmo tempo que oculto outro. Para isso, uso o NOT, para inverter a exibição. Veja como ficou a página Visualforce, com o campo Habilitado:




Já com o campo "desabilitado", que na verdade é um OutputField:




Bem, por hoje é isso!


* Está precisando de um suporte ou uma consultoria no desenvolvimento de páginas Visualforce e classes Apex na sua ORG Salesforce? Entre em contato conosco - CbCloud: http://www.cbcloud.com.br/




Nenhum comentário: