Skip to main content
From 16:00 UTC on January 17, 2026, to 20:00 UTC on January 17, 2026, we will perform planned maintenance on the Trailhead, myTrailhead, and Trailblazer Community sites. During the maintenance, these sites will be unavailable, and users won't be able to access them. Please plan your activities around this required maintenance.

使用标准控制器

学习目标

完成本单元后,您将能够:

  • 阐述 Visualforce 标准控制器的含义并描述其关键属性。
  • 在 Visualforce 页面中添加标准控制器。
  • 显示页面标准控制器检索到的记录数据。
  • 编写一个表达式,使用点记法来访问相关记录上的字段。
备注

备注

用中文(简体)学习?在中文(简体)Trailhead Playground 中开始挑战,用括号中提供的译文完成挑战。仅复制并粘贴英文值,因为挑战验证基于英文数据。如果在中文(简体)组织中没有成功通过挑战,我们建议您 (1) 将区域设置切换为美国,(2) 按此处说明将语言切换为英文,(3) 再次单击“检查挑战”按钮。

查看 Trailhead 本地化语言徽章详细了解如何利用 Trailhead 译文。

Visualforce 标准控制器简介

Visualforce 使用传统的模型 - 视图 - 控制器(MVC)范例,包含复杂的内置控制器来处理标准动作和数据访问,并提供与 Lightning 平台数据库简单而紧密的集成。这些内置控制器通常称为标准控制器,甚至称为标准控制器

MVC 设计模式可以轻松地将视图及其样式与底层数据库和逻辑分离。在 MVC 中,视图(Visualforce 页面)与控制器交互,控制器为页面提供功能。例如,控制器可以包含单击按钮时要执行的逻辑。控制器通常还与模型(数据库)进行交互 — 提供视图可能想要显示的可用数据,或将更改推送回数据库。

大多数标准和所有自定义对象都有标准控制器,可用于与对象关联的数据进行交互,因此您无需自己编写控制器代码。您可以扩展标准控制器以添加新功能,或从零开始创建自定义控制器。这里将为您介绍标准控制器。

找到一个记录 ID 并将其添加到请求 URL 中

通过将记录 ID 添加为请求 URL 中的参数,向标准控制器提供记录 ID。

如果要使用标准控制器引用特定的记录,需要知道要处理的记录标识符或记录 ID。使用 ID 检索数据,并在记录数据更改时将其保存回数据库。

当 Visualforce 页面与组织中的其他页面交互时,可以自动传入记录的标识符,Visualforce 页面可以使用标识符来查找和显示该记录的数据。但是在开发过程中,您的页面是独立的,因此为了让页面显示来自数据库中记录的数据,您需要手动提供记录 ID。最简单的方法是将其作为 GET 参数添加到请求 URL 中。

  1. 要创建新的 Visualforce 页面,请打开 Developer Console,然后单击 File(文件) | New(新建) | Visualforce Page(Visualforce 页面)。输入 AccountSummary 作为页面名称。
  2. 在编辑器中,将标记替换为以下内容。
    <apex:page>
        <apex:pageBlock title="Account Summary">
            <apex:pageBlockSection>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:page>
    此标记会创建一个框,供您添加一些有用的信息。
  3. 单击 Preview(预览)可打开页面预览,您可以在进行更改时查看该预览。确保您可以看到预览窗口的 URL 字段。只需几个步骤即可实现。
  4. 在一个单独的浏览器窗口中,转到组织的主页,然后选择“客户”选项卡。如果“客户”选项卡不可见,请从右上角的应用程序菜单中选择“销售”,即可切换到销售应用程序。
  5. 确保“查看”菜单显示“所有客户”。
  6. 在“所有客户”页面,单击任意客户名称。
  7. 客户详细信息页面加载完毕后,查看该页面的 URL。URL 看起来是这样的:https://MyDomainName.lightning.force.com/lightning/r/Account/001D000000JRBes/view。记录的标识符,即记录 ID,是一系列字母和数字的组合。该示例中,记录 ID 为 001D000000JRBes(与组织中的记录 ID 有所不同)。组织中所有对象类型的所有记录中,记录 ID 都是唯一的。
  8. 选择记录 ID,并将其复制到剪贴板。在您离开客户详细信息页之前,看看整个页面和上面显示的信息。[Alt text: Account details page] 这样做,不仅仅是为了获取记录 ID。至此,您将了解如何使用 Visualforce 代码构建显示相同信息的页面。
  9. 切换至您从开发者控制台打开的预览页面。单击浏览器窗口的 URL 字段,在 URL 的末尾输入 &id=,然后粘贴您之前复制的记录 ID。URL 看起来应该是这样的:https://MyDomainName.lightning.force.com/apex/AccountSummary?core.apexpages.request.devconsole=1&id=001D000000JRBes
  10. 按回车键以在新的 URL 中加载页面。

虽然加载带有记录 ID 的预览页看起来没有任何不同,但是添加 ID 意味着您可以请求标准控制器通过加载记录、且确保记录在页面上可用的方式来帮助您解决问题。

要在 Lightning Experience 的上下文中预览页面,请返回至主浏览器窗口,您可以在其中查看客户详细信息页。从客户详细信息页中,打开浏览器的 JavaScript 控制台并输入以下代码。请不要忘记将 pageName 替换为您的页面名称:

$A.get("e.force:navigateToURL").setParams( {"url": "/apex/pageName"}).fire();

您还可以通过将记录 ID 参数添加到 JavaScript 中 URL 末尾的方式来预览带有记录 ID 的页面:

$A.get("e.force:navigateToURL").setParams(
    {"url": "/apex/pageName?id=00141000004jkU0AAI"}).fire();

显示单个记录的数据

将客户的标准控制器添加到页面,然后引用客户字段以显示记录数据。

按照上一章节中加载的页面 URL 执行以下步骤,创建一个显示客户摘要的页面。

  1. 在页面标记的开头,在 <apex:page>标签内部添加以下属性。
    standardController="Account"现在当您保存页面时,预览页面会像以前一样重新加载,但这次客户的标准控制器处于活动状态。当页面加载时,标准控制器解析 URL 中的参数,找到 id 参数,并使用 id 的值来检索记录使得记录在页面上可用。您还看不到记录,但记录就在那里。
  2. 在页面正文中,添加以下标记。
Name: {! Account.name }

现在您可以看到正在检索记录!您应该会看到添加到 URL 中的记录 ID 所属的客户名称。

  1. 将客户名称的单行替换为以下标记。
    Name: {! Account.Name } <br/>
    Phone: {! Account.Phone } <br/>
    Industry: {! Account.Industry } <br/>
    Revenue: {! Account.AnnualRevenue } <br/>
    您的完整代码显示如下。
    <apex:page standardController="Account">
        <apex:pageBlock title="Account Summary">
            <apex:pageBlockSection>
                Name: {! Account.Name } <br/>
                Phone: {! Account.Phone } <br/>
                Industry: {! Account.Industry } <br/>
                Revenue: {! Account.AnnualRevenue } <br/>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:page>
    结果应该是一个简单的客户摘要。 

简单的客户摘要页面

接下来会发生什么呢?这一系列行为,都多亏了标准控制器!

  1. 当页面被加载,<apex:page> 组件激活时,也会激活客户对象的标准控制器。
  2. 标准控制器检测 URL 中有一个 ID 参数,然后搜索并检索匹配的客户记录。
  3. 标准控制器获取记录并将其放入可供页面使用的变量中。变量名与标准控制器的 sObject 同名,都称为 Account。它是一个对象变量,包含客户 sObject 上可用的所有字段。
  4. 四个 Visualforce 表达式都引用了客户变量。这些表达式使用点记法访问客户变量中的各个字段。{!Account.Name} 获取了客户名称等数据。

但是,收入数字是怎么回事?它是用科学计数法显示的。怎么能让它显示为货币呢?

数字显示为科学记数法中的“原始”值的原因是数字由表达式直接输出。它将原始值直接放到页面上。要控制值的格式,您需要使用一个组件,并为该组件提供要处理的值。该组件将获取原始值并对其进行适当的格式化,然后负责将结果输出到页面。您会在别的章节了解如何做到这一点。这里我们只探讨访问记录数据。

使用点记法显示相关记录的数据。

例如,在查看客户对象详细信息时,您可能已经注意到客户对象有一个名为“客户所有者”的字段,它的类型是 Lookup(User)。换句话说,这个字段与用户记录有关系。通过单击“客户所有者”字段标签链接,您会发现其字段名称是“所有者”。

Owner 关系代表一个用户。并且,如果从 Setup(设置)转到 Object Manager(对象管理器)| User(用户) | Fields & Relationships(字段和关系),您会发现用户有一个 Name(名称)字段。让我们使用此信息来显示用户。

在页面正文的客户名称之前,添加以下行。

Account owner: {! Account.Owner.Name } <br/>

点记法 (Account.Owner.Name) 表示要遍历记录之间的关系。Account.Owner 表示客户记录的所有者字段。末尾的附加 Name 表示 owner 字段不是字符串的简单字段,而是与另一条记录(即 Lookup(User))的关系,并且您希望获取由 Owner 字段值表示的记录(即用户记录),并在该记录上显示 Name 字段。

了解详细信息...

标准控制器功能非常强大,我们只是触及了皮毛。您将在其他地方了解关于标准触发器的更多信息,但这里聚焦了重点信息。

除了此处提及的轻松数据访问之外,标准控制器还提供了一组标准操作,例如创建、编辑、保存和删除,您可以使用标准用户界面元素(例如按钮和链接)将这些操作添加到您的页面中。当您了解 Visualforce 输入表单并将更改保存回数据库时,您将了解有关这些标准操作的更多信息。

想要嵌入到对象页面布局中的 Visualforce 页面,用作特定于对象的自定义操作,或用作 Salesforce 应用程序的移动卡必须使用相关对象的标准控制器。

如果您创建了自己的自定义对象(而不是使用客户等对象),并且想知道如何引用一个字段,则必须遵循略有不同的程序。从 Setup(设置)中,在 Quick Find(快速查找)方框中输入 Object Manager,然后选择 Object Manager(对象管理器)| <您的自定义对象> |Fields & Relationships(字段和关系)。找到您的字段并选择该字段。API 名称指明了必须在 Visualforce 页面中使用的字段的名称。例如,如果您的字段叫做 Foo,则其 API 名称为 Foo__c,您可以通过该名称引用 Foo,如:{! myobject__c.foo__c}

尽管标准控制器功能强大,但有时您还是需要做一些不同的事情,而 Visualforce 也都可以。任何时候,您都可以使用 Apex 代码替换或扩充控制器,编写自己的控制器,或扩展内置控制器。

资源

在 Salesforce 帮助中分享 Trailhead 反馈

我们很想听听您使用 Trailhead 的经验——您现在可以随时从 Salesforce 帮助网站访问新的反馈表单。

了解更多 继续分享反馈