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 であることを示しています。