4

Visualforce ページで奇妙な結果が得られます (はい、Salesforce.com は厄介です、私は知っています)。私の問題は、inputField を使用してカスタム sObject にデータをバインドしようとしていますが、カスタム コントローラーでユーザー入力データを認識していないことです。

ページのコード スニペットは次のとおりです。

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

コントローラーからのコードは次のとおりです。

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

workingFee プロパティが null でないことを確認しました。値を入力した後に [手数料を保存] ボタンをクリックすると、ページがリロードされ、「エラー: 必須フィールドがありません: [Fee__c]」というメッセージが表示されます (注: ここの Fee__c は通貨フィールドです。これが sObject であることを期待していますか?)

saveFee() メソッドのデバッグ ステートメントは、ユーザーが入力した値が割り当てられていると思われるのに、workingFee の重要なフィールドが null であることを示しています。

4

2 に答える 2

10

単純な { get; で公開されたプロパティにコントロールをバインドするという問題が山ほどありました。設定; }表記法...コードの残りの部分はプロパティを参照しますが、奇妙な理由により、ビューは(常に)バインドされません...

次のような明示的な get/set メソッドを書いてみてください

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

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

これが異なる動作をする論理的な理由はありません。

public Fee__c workingFee { get; set; }

しかし、私の経験では、時々そうです...

あなたはそれが不快であることについて何を言いましたか?;)

于 2009-12-21T20:27:00.173 に答える
0

Immediate=false/true もかなりの回数噛まれました。よく釣るイアン。

于 2012-04-18T21:48:42.370 に答える