What problem does it solve? Liferay admin JSPs combining clay:management-toolbar with liferay-ui:search-container and RowChecker exhibit confusing bulk-selection bugs: "select all" only submits the current page's rows, checkboxes lack name attributes, and scripts run before the DOM exists. This Skill documents the verified architecture and correct patterns to make bulk actions work reliably. ## Core Features & Use Cases - Selection state via the AUI component: Read bulkSelection and subscribe to rowToggled through Liferay.componentReady(searchContainerId) instead of inspecting the DOM. - Server-side select-all resolution: Submit a selectAll flag plus filter criteria and recompute the matching row set in the action class, mirroring Liferay's own BulkSelectionFactory pattern. - propsTransformer wiring: Route actionDropdownItems clicks through onActionButtonClick in a propsTransformer, avoiding fragile DOM event delegation on React-rendered toolbar elements. - Use Case: A bulk delete on a 76-item list only deletes 20 rows because select-all checks only the current page; apply the hidden-flag plus server-recompute pattern so every matching item is deleted. ## Quick Start Fix my Liferay admin JSP so the management toolbar's select-all checkbox actually applies the bulk delete action to every matching row across all pages.