# Placing Lightning components, flows and Visualforce

*Platform Developer Study Guide · User Interface · Last updated October 15, 2026 · https://www.certifyforce.com/study-guide/platform-developer/user-interface/custom-ui-components-lightning-visualforce-actions*

Choosing between Lightning web components, screen flows, quick actions and Visualforce for a UI requirement, and configuring where each surfaces: js-meta.xml targets, record context, flow screens, Experience Builder, navigation and the Visualforce controller patterns still tested.

- Certification: Salesforce Platform Developer
- Exam section: User Interface
- Study guide: https://www.certifyforce.com/study-guide/platform-developer

**Official exam objective:**

> Given a scenario, display and use custom user interface components, including Lightning components, Flow, and Visualforce.

## What the exam expects

- Choose a Lightning web component, screen flow, quick action or Visualforce page for a requirement, including when Visualforce is still the answer (PDF output, existing pages).
- Configure `.js-meta.xml` so a component appears in Lightning App Builder, flow screens, record actions, the utility bar or Experience Builder, with admin-configurable properties.
- Give a component or flow record context (`recordId`) and navigate from a component to records and prefilled new-record pages.
- Pick between a standard controller, a controller extension and a standard set controller, and embed Lightning components in Visualforce.

**Key terms.** *Target*: a `<target>` in `.js-meta.xml` naming where a component can be used. *targetConfig*: per-target design properties. *Screen quick action*: an LWC shown in a modal from a record page. *Controller extension*: Apex that adds to a standard or custom controller. *Standard set controller*: the Visualforce list controller for a set of records.

## Key facts

| Fact | Detail | Source |
|---|---|---|
| Builder visibility | `isExposed` true plus at least one `<target>` | [XML Configuration File Elements](https://developer.salesforce.com/docs/platform/lwc/guide/reference-configuration-tags.html) |
| Admin-configurable property | `@api` in JS plus `<property>` in a `targetConfig`; config type wins on mismatch | [Lightning App Builder config](https://developer.salesforce.com/docs/platform/lwc/guide/use-config-for-app-builder.html) |
| Record page Id | Public `@api recordId`, set to the 18-character Id in a record context | [Record Context](https://developer.salesforce.com/docs/platform/lwc/guide/use-record-context.html) |
| Experience Builder drag and drop | `lightningCommunity__Page`; `lightningCommunity__Default` for editable properties | [Experience Builder config](https://developer.salesforce.com/docs/platform/lwc/guide/use-config-for-community-builder.html) |
| LWC quick action types | Screen (modal) or headless (`@api invoke()`); record pages in Lightning Experience only | [Quick Actions](https://developer.salesforce.com/docs/platform/lwc/guide/use-quick-actions.html) |
| Flow on a record page | Text variable `recordId`, Available for input, for "Pass record ID" | [Embed a Screen Flow](https://help.salesforce.com/s/articleView?id=platform.flow_distribute_internal_lab.htm&language=en_US&type=5) |
| Flow screen property roles | `inputOnly`, `outputOnly`, or both by default | [Flow Screens config](https://developer.salesforce.com/docs/platform/lwc/guide/use-config-for-flow-screens.html) |
| Prefill a new record | `standard__objectPage`, `actionName: 'new'`, `state.defaultFieldValues` | [PageReference Types](https://developer.salesforce.com/docs/platform/lwc/guide/reference-page-reference-type.html) |
| Extension constructor | One `ApexPages.StandardController` (or custom controller) argument | [Building a Controller Extension](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_controller_extension.htm) |
| Multiple extensions | Leftmost extension's method overrides the same-named one | [Building a Controller Extension](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_controller_extension.htm) |
| StandardSetController limit | 10,000 records; query locator over that throws `LimitException` | [StandardSetController Class](https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_pages_standardsetcontroller.htm) |
| Framework nesting | Aura can contain LWC; LWC can't contain Aura | [Aura Coexistence](https://developer.salesforce.com/docs/platform/lwc/guide/interop-intro.html) |

## Check yourself

- Why does a component with `lightning__RecordPage` listed still not appear in Lightning App Builder?
- When is Visualforce still the right choice for new work?
- Which flow variable does the Flow component fill with the current record's Id on a record page?
- Why can a screen quick action's `recordId` be undefined in `connectedCallback()`?

## Sources

- [XML Configuration File Elements](https://developer.salesforce.com/docs/platform/lwc/guide/reference-configuration-tags.html)
- [Make a Component Aware of Its Record Context](https://developer.salesforce.com/docs/platform/lwc/guide/use-record-context.html)
- [Configure a Component for Lightning App Builder](https://developer.salesforce.com/docs/platform/lwc/guide/use-config-for-app-builder.html)
- [Configure a Component for Flow Screens](https://developer.salesforce.com/docs/platform/lwc/guide/use-config-for-flow-screens.html)
- [Quick Actions](https://developer.salesforce.com/docs/platform/lwc/guide/use-quick-actions.html)
- [Create Screen Quick Actions](https://developer.salesforce.com/docs/platform/lwc/guide/use-quick-actions-screen.html)
- [Configure a Component for Experience Builder](https://developer.salesforce.com/docs/platform/lwc/guide/use-config-for-community-builder.html)
- [Basic Navigation](https://developer.salesforce.com/docs/platform/lwc/guide/use-navigate-basic.html)
- [PageReference Types](https://developer.salesforce.com/docs/platform/lwc/guide/reference-page-reference-type.html)
- [Navigate to Pages, Records, and Lists](https://developer.salesforce.com/docs/platform/lwc/guide/use-navigate.html)
- [Embed a Screen Flow in a Lightning Page](https://help.salesforce.com/s/articleView?id=platform.flow_distribute_internal_lab.htm&language=en_US&type=5)
- [Determine How to Distribute Your Screen Flow](https://help.salesforce.com/s/articleView?id=platform.flow_distribute_screen_flow_options.htm&language=en_US&type=5)
- [Run a Screen Flow From a Quick Action](https://help.salesforce.com/s/articleView?id=platform.flow_distribute_internal_action.htm&language=en_US&type=5)
- [Using Standard Controller Actions](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_controller_std_actions.htm)
- [Building a Controller Extension](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_controller_extension.htm)
- [Standard List Controllers](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_controller_sosc_about.htm)
- [StandardSetController Class](https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_pages_standardsetcontroller.htm)
- [Render a Visualforce Page as a PDF File](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_output_pdf_renderas.htm)
- [Use Lightning Components in Visualforce Pages](https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/components_visualforce.htm)
- [Aura Coexistence](https://developer.salesforce.com/docs/platform/lwc/guide/interop-intro.html)
- [lightning-record-form](https://developer.salesforce.com/docs/component-library/bundle/lightning-record-form/documentation)

## About the full unit

The "Core concepts", "Exam traps" and "Worked scenario" sections of this unit, its 18 linked practice questions, and unlimited timed mock exams are included with the Platform Developer pack (USD $19): https://www.certifyforce.com/practice-exams
