Component Render

您可以使用以下两种方式之一实现组件渲染:完全通过编程方式或使用 ANTLR Stringtemplate。严格来说,有一个简单的 Function 呈现器界面,它将 Context 作为输入,并输出 AttributedString 的列表。这允许您在模板化和代码之间进行选择。

如果您不需要执行任何复杂操作,或者您只想稍微修改现有组件布局,那么模板化是一个不错的选择。然后通过代码渲染为您提供了所需的灵活性。

通过编程方式进行渲染是创建 Function

Unresolved include directive in modules/ROOT/pages/components/ui/render.adoc - include::../../test/java/org/springframework/shell/docs/UiComponentSnippets.java[]

然后,您可以将其连接到组件:

Unresolved include directive in modules/ROOT/pages/components/ui/render.adoc - include::../../test/java/org/springframework/shell/docs/UiComponentSnippets.java[]

组件有自己的上下文,但通常会从父组件类型共享一些功能。以下表格显示了这些上下文变量:

Table 1. TextComponentContext Template Variables
Key Description

resultValue

组件呈现其结果后的值。

name

组件的名称——也就是其标题。

message

为组件设置的可能消息。

messageLevel

消息的级别—— INFOWARNERROR 之一。

hasMessageLevelInfo

如果级别为 INFO 则返回 true。否则为 false。

hasMessageLevelWarn

如果级别为 WARN,则返回 true。否则,则返回 false。

hasMessageLevelError

如果级别为 ERROR,则返回 true。否则,则返回 false。

input

The raw user input.

Table 2. SelectorComponentContext Template Variables
Key Description

name

组件的名称——也就是其标题。

input

原始用户输入,大部分用于过滤。

itemStates

完整项目状态列表。

itemStateView

项目状态的可视列表。

isResult

如果上下文在结果模式中,则返回 true

cursorRow

选择器中的光标当前行。

Table 3. ComponentContext Template Variables
Key Description

terminalWidth

终端宽度,类型为 Integer,如果没有设置,则默认为 NULL