SalesForce Apex VisualForce: Come usare una Wrapper Class

Codice VisualForce

Potresti cercare anche Come passare i valori da una pagina visualforce ad un sObject nel suo controller  o anche Binding visualforce sObject e anche Come astrarre dei valori in una pagina visualforce passandoli ad un wrapper che crea un sObject

La definizione di sObject è di un oggetto generico

<apex:page lightningStylesheets="true" standardController="Acquisto__c" extensions="CassaInputFieldCnt" docType="html-5.0">           
    <script  type="text/javascript" src="http://ajax.googaleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script  type="text/javascript">
    	function aggiornaQnt(val,id){         
        	console.log(val);
        	console.log(id);
        }
    
    	$("#qnt").bind('keyup mouseup', function () {
                console.log("changed");            
        });
    </script>
    <apex:form >
        
        <apex:pageBlock id="cassa" mode="mailDetail">
            <apex:pageBlockSection columns="1" id="contentCassa" title="Seleziona libri">
                
                <!-- Ricerca libro -->
                <apex:pageBlockSectionItem >
                    <apex:inputField value="{!RicercaLibri.Libro__c}" />                    
                </apex:pageBlockSectionItem>               
                
                <!-- Acquisizione Libro -->
                <apex:pageBlockSectionItem >                    
                    <apex:commandButton value="Aggiungi"  action="{!Aggiungi}" reRender="ListaLibriSelezionati, Totale" />
                </apex:pageBlockSectionItem>                

                
                <apex:pageBlockSectionItem >
                 	
                    <apex:pageBlockTable value="{!ListaLibriSelezionati}" var="Libro" width="100%" id="ListaLibriSelezionati">
                	
                       <apex:column width="100%" headerValue="Libri disponibili" value="{!Libro.Titolo}"/>
                       <apex:column width="100%" headerValue="Quantità">
                           <apex:outputpanel >
                               <apex:inputText html-min="1" html-type="number" value="{!Libro.Qnt}"  style="width:80px!important;" />                                 
                               <apex:actionSupport event="onclick" action="{!ModificaColli}" rerender="ListaLibriSelezionati,Totale">
                                   <apex:param name="IdLibro" value="{!Libro.id}" />
                                   <apex:param name="QntLibro" value="{!Libro.Qnt}" />
                               </apex:actionSupport>
                           </apex:outputpanel>
                           
                       </apex:column>
                       <apex:column width="100%" headerValue="Prezzo">
                           <apex:outputText id="prezzo">{!Libro.Prezzo} <b>€</b></apex:outputText>                           
                       </apex:column>
                       
                     </apex:pageBlockTable>
                    
                </apex:pageBlockSectionItem>
                                
            </apex:pageBlockSection>
            
			<!-- inizio footer con riepilogo -->            
            <apex:pageBlock >
                <apex:pageBlockSection columns="3">
                    <apex:pageBlockSectionItem />
                    <apex:pageBlockSectionItem />
                                        
                    <apex:pageBlockSectionItem >
                        <apex:outputPanel id="Totale" rendered="true">
                            Totale: <b><apex:outputText >{!Totale}</apex:outputText> €</b>
                        </apex:outputPanel>
                    </apex:pageBlockSectionItem>
                    
                    <apex:pageBlockSectionItem />
                    <apex:pageBlockSectionItem />
                    <apex:pageBlockSectionItem >
                            <apex:commandButton value="PAGA"/>                        
                    </apex:pageBlockSectionItem>
                    
                </apex:pageBlockSection>
            </apex:pageBlock>
            <!-- fine footer con riepilogo -->            
            
        </apex:pageBlock>                
    </apex:form>
</apex:page>

Wrapper Class

public with sharing class CassaInputFieldCnt {
    
    // Libri presenti nell'inputField 
    public Acquisto__c RicercaLibri {get;set;}
    
    // Libri aquisiti da inputField
    public Libro__c AcquisizioneLibri {get;set;}
    
    // Libri inseriti in cassa (precedentemente acquisiti)
    public List<wrapObjectLibri> ListaLibriSelezionati {get;set;}
    
    // Totale complessivo
    public Double  Totale {get;set;} 
    
    // Costruttore classe generale   
    public CassaInputFieldCnt(ApexPages.StandardController sc) {
        
        RicercaLibri = new Acquisto__c(); 
        AcquisizioneLibri = new Libro__c();
        ListaLibriSelezionati = new List<wrapObjectLibri>();
        Totale = 0; 
                
    }
    
    // Metodo al click di bottone Aggiungi
    public void Aggiungi(){
        
        // Id libro selezionato in inputField
        ID idLibroSelezionato = RicercaLibri.Libro__c;
        
        // Retrive dati libro acquisito
        AcquisizioneLibri = [select id,Giacenza__c,Prezzo__c,Name 
                              FROM Libro__c 
                              where id=:idLibroSelezionato];
        
        // Instanza classe Wrapper
        wrapObjectLibri libro = new wrapObjectLibri();
        
        // Crezione sObject
        libro.Id = AcquisizioneLibri.id;
        libro.Titolo = AcquisizioneLibri.Name;
        libro.Qnt = 1;
        libro.Prezzo = AcquisizioneLibri.Prezzo__c;
        
        ListaLibriSelezionati.add(libro);
        
        
        totale += AcquisizioneLibri.Prezzo__c;
            
    }
    
    // Metodo al cambio della quantità
    public void ModificaColli(){
        
        Id IdLibro = ApexPages.currentPage().getParameters().get('idLibro');
        Integer QntLibro = integer.valueOf(ApexPages.currentPage().getParameters().get('QntLibro'))+1;        
        System.debug('Id: '+IdLibro+' Quantità: '+QntLibro);
        System.debug(ListaLibriSelezionati);
        
        for(wrapObjectLibri book:ListaLibriSelezionati){
            if(book.id == IdLibro){
                book.Prezzo *= QntLibro;
                book.Qnt = QntLibro;
            }
        }
        
        Totale = 0;
        for(wrapObjectLibri totaleScontrino:ListaLibriSelezionati){
            Totale += totaleScontrino.Prezzo;
        }
        
        
    }	
    
    // Metodo al click del bottone Paga    
    public void ProcessPaga(){
      // aggiorno i record per Acquisti__c
      // aggiorno i record per Scontrino__c
    }
    
    // Apex Wrapper Class
    public class wrapObjectLibri {
		
		public Id  Id {get; set;}
        public String  Titolo {get; set;}
        public Integer Qnt {get; set;}
        public Double  Prezzo {get; set;}

        public wrapObjectLibri(){ }
	} 
    	 
}