自定义页面 Block
这不是一个 Java SPI。 AuraBoot 没有
PageBlockExtension之类的插件扩展点。页面 Block 的能力由平台前端的渲染注册表和后端 DSL 白名单共同决定。下面是真实机制。
内置 Block 类型 —— DslRegistry.BlockType
页面 Block 的真源是平台后端的 DslRegistry.BlockType 枚举
(com.auraboot.framework.meta.constant.DslRegistry,Java)。它定义了所有内置 blockType,例如:
form-section、detail-section、form-buttons、filters、embedded-list、card-grid、
chart、gallery、gantt、calendar、heatmap、gauge、funnel、bpm-panel、
evidence-panel、activity-timeline、field-history、iframe、image、divider、
description、action、composite、custom 等。页面 schema 的 blocks[].blockType 取这些值,
schemaVersion 为 4。
自定义 Block —— 前端 BlockRegistry
要加一个平台没有的 Block,机制是在前端注册一个渲染器,而不是写 Java 插件:
- 前端注册:在
web-admin/app/ui/schema-renderer/BlockRegistry.ts用BlockRegistry.register(blockType, { component, normalizeData })注册——component是 React 渲染组件,可选的normalizeData(raw, block)把 API 原始 payload 整形成组件期望的结构。组件按 blockType 懒加载,不会把所有 Block 拉进主 bundle。 - 页面引用:页面 schema 的
blocks里用该blockType引用它,配置数据源/属性。 - 后端容忍未知类型:
PageSchemaBlockStructureValidator对不在白名单里的blockType只记软告警S-PAGE-BLOCK-TYPE,不硬拒——这是刻意的前向兼容,custom 插件 Block 才能挂上、未来新增 blockType 不会被旧后端拒掉。
典型错误
- 只在前端注册、不进后端
DslRegistry.BlockType:导入时报[S-PAGE-BLOCK-TYPE]软告警。Block 仍能渲染(前向兼容),但若希望它成为白名单内的「一等」类型,需要在后端DslRegistry.BlockType加一个枚举值。 records数据源没配adaptor:table:默认会按 optionList 映射成{value,label}毁列;列表/表格类 Block 的dataSource需adaptor:table。- 把自定义 Block 当成 Java 扩展点找:没有
PageBlockExtension/@PageBlock注解——渲染在前端,后端只做 schema 校验。
相关
- Page Designer —— 可视化拖出 blocks
- Page 与布局 —— 页面 schema(kind / schemaVersion / blocks)结构
- 移动端渲染 —— 同一份 Block 在移动端怎么渲染