Pergunta

Estou tendo resultados estranhos com uma página do Visualforce (sim, o Salesforce.com é nojento, eu sei). Meu problema é que estou tentando usar o InputField para vincular dados em um Sobject personalizado, mas no meu controlador personalizado, ele não está reconhecendo os dados de entrada do usuário.

Aqui está o trecho de código da página:

<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 aqui está o código do controlador:

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

Eu certifiquei -me de que a propriedade Workingfee não fosse nula. Sempre que eu pressiono o botão "Salvar taxa" depois de inserir os valores, ele recarrega a página e me dá a mensagem "Erro: os campos obrigatórios estão faltando: [Fee__c] (Nota, Fee__c Aqui está um campo de moeda - não é que não seja espera que isso seja um objeto, não é?)

A instrução Debug no método SaveFee () mostra que os campos importantes do Workingfee são nulos, quando eu esperaria que eles tenham recebido a entrada dos valores pelo usuário.

Foi útil?

Solução

Eu tive um monte de problemas que vincula controles a uma propriedade exposta com o simples {get; definir; } notação ... o restante do seu código verá as propriedades, mas por algum motivo bizarro, sua visão não será (sempre) se vincular ...

Tente escrever métodos explícitos de obter/definir, como

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

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

Não há razão lógica para que isso funcione diferente para

public Fee__c workingFee { get; set; }

Mas na minha experiência, às vezes faz ...

O que você disse sobre ser nojento? ;)

Outras dicas

Imediato = false/true também me mordeu algumas vezes. Boa pegar Ian.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top