与VisualForce的inputField数据绑定问题

时间:2009-12-21 20:19:18

标签: salesforce apex-code visualforce

我在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]”(注意,这里的费用是一个货币字段 - 不是它期望这是一个sObject,是吗?)

saveFee()方法中的debug语句显示workingFee的重要字段为null,当我希望它们已被赋予用户输入的值时。

2 个答案:

答案 0 :(得分: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; }

但根据我的经验,它有时确实......

你怎么说它是icky? ;)

答案 1 :(得分:0)

立即=假/真也咬过我很多次。好抓伊恩。