Frage

Ich habe seltsame Ergebnisse mit einer Visualforce-Seite (ja, Salesforce.com eklig ist, ich weiß). Mein Problem ist, dass ich versuche, das Eingabefeld zu binden Daten auf einem benutzerdefiniertes SObject zu verwenden, aber in meinem benutzerdefinierten Controller, wird es nicht die Benutzereingabedaten zu erkennen.

Hier ist der Code-Schnipsel von der Seite:

<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>

und hier ist der Code von der Steuerung:

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;
}

Ich habe dafür gesorgt, die workingFee Eigenschaft ist nicht null. Jedes Mal, wenn ich die „Save Fee“ Button drücken nach Eingabe der Werte neu geladen es die Seite und gibt mir die Meldung „Fehler: Erforderliche Felder fehlen: [Fee__c]“ (beachten Sie, hier Fee__c ist ein Währungsfeld - es ist nicht, dass es erwartet, dass dies ein SObject sein, oder?)

Die Aussage Debug in den saveFee () Methode zeigt, dass workingFee wichtigen Felder null sind, wenn ich sie sein erwarten würden die Werte Eingabe durch den Benutzer zugeordnet.

War es hilfreich?

Lösung

Ich habe einen ganzen Haufen Probleme hat Kontrollen auf eine Eigenschaft mit dem einfachen ausgesetzten Bindung {get; einstellen; } Notation ... Der Rest des Codes werden die Eigenschaften sehen, aber aus irgendeinem bizarren Grund, Ihre Ansicht wird nicht (immer) binden ...

Versuchen explizit get / set-Methoden schreiben, wie

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

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

Es gibt keinen logischen Grund, warum dies anders arbeiten sollte

public Fee__c workingFee { get; set; }

aber nach meiner Erfahrung, es tut manchmal ...

Was hast du gesagt, darüber ist kitschig? ;)

Andere Tipps

Immediate = false / true hat gebissen mich ein paar Mal zu. Guter Fang Ian.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top