2

您好,我创建了一个视觉力页面,以标准的主控制器作为控制器并对其进行扩展。我想这样做,所以我仍然可以使用 apex:detail 控件,而不是重新发明轮子来处理标准的潜在客户信息、相关列表等。

我添加了一个 apex:commandbutton 并使其调用保存。当我点击这个按钮时,我可以清楚地看到我的函数正在被调用。但是,不会捕获通过内联编辑对潜在客户信息所做的所有更改。

例如,如果我使用内联编辑编辑 LastName 并单击 apex:command 按钮,则不会保存新的 LastName 值。这几乎就像 apex:commandbutton 调用的保存函数不知道数据更改一样。

以下是我的视觉力量页面的代码。

<apex:page standardController="Lead" extensions="LeadTestExtensionController">
<apex:form >
    <apex:commandButton action="{!save}" value="Save" id="btnSave"/>
    <apex:detail subject="{!Lead.Id}" relatedList="true" showchatter="true" inlineEdit="true" />
</apex:form>
</apex:page>

以下是共享类 LeadTestExtensionController { private Apexpages.StandardController 控制器;私有 PageReference 页面;私有字符串 id;私人决赛 Lead myLead; 公共字符串位置 {get; 放;}

public LeadTestExtensionController(ApexPages.StandardController stdController) {
    this.controller = stdController;
    this.myLead = (Lead)stdController.getrecord();
    this.page = ApexPages.currentPage();
    this.id = page.getParameters().get('id');
    List<Lead> myLeads = [select Opportunity_Stage__c from lead where id = :id];
    if(myLeads.size() > 0)
    {
        positions = myLeads[0].Opportunity_Stage__c;
    }
}

public PageReference save() {
    this.controller.save();
    PageReference newPage = New PageReference('/apex/RCS');
    newPage.getParameters().put('id',ApexPages.currentPage().getParameters().get('id'));
    newPage.setRedirect(true);
    return newPage;
 }

}

一旦我点击 apex:command 按钮,页面就会被重定向到 apex/RCS,所以我知道它被调用了。但是,如果我返回同一条线索,则姓氏不会改变。我的印象是以下行会调用标准控制器的保存功能,该功能应该负责更新姓氏。

this.controller.save();

我做错了什么,我该如何做到这一点。上面的代码是我实际代码的高度简化版本。我在实际代码中尝试做的是检查某个字段的值,如果它符合某些标准,我希望它做一些事情。但是,我似乎看不到输入的新值。

谢谢你。

4

1 回答 1

1

在标准控制器上调用 save() 不会在详细信息部分提交内联编辑。我刚刚仅使用标准控制器重现了该问题,因此您覆盖它的方式不是问题。

认为这样做的原因是 apex:detail 本身就从数据库中获取了一条记录,而不是使用对标准控制器中的记录的引用。

内联编辑应该为您提供自己的保存按钮,我认为您最好的选择是尝试将其合并到您的设计中。

于 2012-05-11T09:15:01.377 回答