与VisualForce的inputField数据绑定问题

Ben*_*Ben 4 salesforce visualforce apex-code

我在Visualforce页面上得到了奇怪的结果(是的,Salesforce.com很icky,我知道).我的问题是我尝试使用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>
Run Code Online (Sandbox Code Playgroud)

这是来自控制器的代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

我已确保workingFee属性不为null.每当我输入值后点击"保存费"按钮,它就会重新加载页面并给我一条消息"错误:缺少必填字段:[Fee__c]"(注意,这里的费用是一个货币字段 - 不是它期望这是一个sObject,是吗?)

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

kiw*_*pom 10

我有一大堆问题将控件绑定到使用简单{get; 组; 表示法...其余代码将看到属性,但由于某些奇怪的原因,您的视图将不会(始终)绑定...

尝试编写显式的get/set方法,比如

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

public void setWorkingFee(Fee__c value) {
    workingFee = value;
}
Run Code Online (Sandbox Code Playgroud)

没有合理的理由说明为什么这应该有所不同

public Fee__c workingFee { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

你怎么说它是icky?;)

  • 所以我的下一个想法是,既然你没有验证页面(你在commandButton上设置了immediate = true),也许在调用setter之前调用saveFee代码?尝试将立即标志设置为假(我只是出于想法,我害怕) (5认同)