Domanda

Sto avendo strani risultati con una pagina Visualforce (sì, Salesforce.com è icky, lo so). Il mio problema è che io sto cercando di utilizzare l'inputField per associare i dati su un sObject personalizzato, ma nel mio controller personalizzato, esso non riconosce i dati di input dell'utente.

Ecco il frammento di codice dalla pagina:

<apex:pageBlockSection title="Enter New Fee" rendered="{!isRenderedFees}" >

    <apex:inputField value="{!workingFee.Fee_Type__c}"  required="True"/>
   <apex:inputField value="{!workingFee.Fee__c}"  required="True"/> 

    <apex:pageBlockSectionItem >
        <apex:CommandButton value="Save Fee" action="{!saveFee}"  immediate="true" />
        <apex:CommandButton value="Cancel" action="{!cancelFee}" immediate="true" />
    </apex:pageBlockSectionItem> 
 </apex:pageBlockSection>

e qui è il codice dal controller:

public Fee__c workingFee {get; set;}
 ....
public PageReference saveFee(){

    this.workingFee.Trade_Group__c = tradeGroup.id;
    try{
        System.debug('~~~~#~~#~~workingFee: '+workingFee.Fee_Type__c +'='+workingFee.Fee__c);
        upsert workingFee;
    }catch (System.Dmlexception e){
        ApexPages.addMessages(e);
        return null;
    }
    System.debug('~~~~#~~#~~workingFee: '+workingFee.Fee_Type__c +'='+workingFee.Fee__c);
    //savedFees.add(workingFee.clone());

    //re-render the page
    this.isRenderedFees = False;
    return null;
}

Ho fatto in modo che la proprietà workingFee non è nullo. Ogni volta che mi ha colpito il pulsante "Save Fee" dopo aver inserito i valori, si ricarica la pagina e mi dà il "Errore: I campi obbligatori sono mancanti: [Fee__c]" messaggio (nota, Fee__c ecco un campo di valuta - non è che si aspetta che questo sia un sObject, è vero?)

La dichiarazione di debug nel metodo saveFee () mostra che i campi importanti della workingFee sono nulli, quando mi aspetterei loro di sono stati assegnati dai valori introdotti dall'utente.

È stato utile?

Soluzione

Ho avuto un mucchio di problemi di controlli vincolanti a una proprietà esposta con il semplice {get; impostato; } Notazione ... Il resto del codice vedrà le proprietà, ma per qualche strana ragione, la vostra vista non (sempre) si legano ...

Provare a scrivere espliciti metodi get / set, come

private workingFee;
public Fee__c getWorkingFee() {
    return workingFee;
}

public void setWorkingFee(Fee__c value) {
    workingFee = value;
}

Non v'è alcuna ragione logica per cui questo dovrebbe funzionare qualsiasi diverso da

public Fee__c workingFee { get; set; }

ma nella mia esperienza, a volte fa ...

che cosa hai detto sul fatto che sia icky? ;)

Altri suggerimenti

Immediate = false / true ha morso me un bel paio di volte troppo. Buona cattura Ian.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top