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 属性不为空。每当我在输入值后点击“保存费用”按钮时,它都会重新加载页面并给我消息“错误:缺少必填字段:[Fee__c]”(注意,这里的 Fee__c 是一个货币字段——不是它期望这是一个 sObject,是吗?)

saveFee() 方法中的调试语句显示workingFee 的重要字段为空,而我希望它们已被分配用户输入的值。

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