Question

Je vais avoir des résultats étranges avec une page Visualforce (oui, Salesforce.com est dégueu, je sais). Mon problème est que je suis en train d'utiliser le inputField pour lier les données sur un sObject personnalisé, mais dans mon contrôleur personnalisé, il ne reconnaît pas les données d'entrée de l'utilisateur.

Voici l'extrait de code de la page:

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

et voici le code du contrôleur:

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

Je l'ai fait que la propriété workingFee n'est pas nul. Chaque fois que je clique sur le bouton « Enregistrer frais » après avoir entré les valeurs, il recharge la page et me donne le message « Erreur: Les champs obligatoires sont manquants: [Fee__c] » (note, Fee__c est ici un champ monétaire - ce n'est pas que espère que cette nouvelle un sObject, est-il?)

L'instruction de débogage dans la méthode saveFee () montre que les champs importants de workingFee sont nuls, quand je les attendre à avoir été attribué l'entrée de valeurs par l'utilisateur.

Était-ce utile?

La solution

J'ai eu un tas de contrôles contraignants questions à une propriété exposée avec la simple {get; ensemble; } Notation ... Le reste de votre code voir les propriétés, mais pour une raison bizarre, votre vue ne sera pas (toujours) se lient ...

Essayez d'écrire des méthodes get / set explicites, comme

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

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

Il n'y a aucune raison logique pourquoi cela devrait fonctionner tout différent

public Fee__c workingFee { get; set; }

mais dans mon expérience, il fait parfois ...

qu'avez-vous dit à ce sujet d'être dégueu? ;)

Autres conseils

immédiate = false / true m'a mordu quelques reprises aussi. Bonne prise Ian.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top