对于最新的稳定版本,请使用 Spring Shell 3.3.3! |
组件渲染
您可以通过以下两种方式之一实现组件渲染:完全
以编程方式或使用 ANTLR String模板。
严格来说,有一个简单的渲染器接口
,该 ID 将 .
这使您可以在 templating 和 code 之间进行选择。Function
Context
AttributedString
如果您不需要执行任何复杂或 您只想稍微修改现有的组件布局。渲染 然后,THROUGH CODE 让您可以灵活地执行任何需要的操作。
渲染的编程方式是创建一个 :Function
class StringInputCustomRenderer implements Function<StringInputContext, List<AttributedString>> {
@Override
public List<AttributedString> apply(StringInputContext context) {
AttributedStringBuilder builder = new AttributedStringBuilder();
builder.append(context.getName());
builder.append(" ");
if (context.getResultValue() != null) {
builder.append(context.getResultValue());
}
else {
String input = context.getInput();
if (StringUtils.hasText(input)) {
builder.append(input);
}
else {
builder.append("[Default " + context.getDefaultValue() + "]");
}
}
return Arrays.asList(builder.toAttributedString());
}
}
然后你可以将其挂接到一个组件上:
@ShellMethod(key = "component stringcustom", value = "String input", group = "Components")
public String stringInputCustom(boolean mask) {
StringInput component = new StringInput(getTerminal(), "Enter value", "myvalue",
new StringInputCustomRenderer());
component.setResourceLoader(getResourceLoader());
component.setTemplateExecutor(getTemplateExecutor());
if (mask) {
component.setMaskCharacter('*');
}
StringInputContext context = component.run(StringInputContext.empty());
return "Got value " + context.getResultValue();
}
组件有自己的上下文,但通常共享一些功能 从父组件 types.下表显示了这些上下文变量:
钥匙 | 描述 |
---|---|
|
组件呈现其结果后的值。 |
|
组件的名称 — 即其标题。 |
|
组件的可能消息集。 |
|
消息的级别 — 、 、 或 。 |
|
如果 level 为 ,则返回 。否则为 false。 |
|
如果 level 为 ,则返回 。否则为 false。 |
|
如果 level 为 ,则返回 。否则为 false。 |
|
原始用户输入。 |
钥匙 | 描述 |
---|---|
|
组件的名称 — 即其标题。 |
|
原始用户输入 — 主要用于筛选。 |
|
项状态的完整列表。 |
|
项状态的可见列表。 |
|
如果上下文处于 result 模式,则返回。 |
|
选择器中的当前光标行。 |
钥匙 | 描述 |
---|---|
|
终端的宽度,类型为 Integer,如果未设置,则默认为 NULL。 |