组件渲染
你可以用两种方式实现组件渲染:完全渲染
无论是程序化还是使用 ANTLR 字符串模板。
严格来说,有一种简单的功能渲染器界面
该上下文作为输入和输出,包含一个列表属性字符串.
这让你可以在模板和代码之间做选择。
如果你不需要做复杂的事情,模板是个不错的选择 你只需要稍微修改现有组件布局。渲染 通过代码,你就能灵活地做任何需要做的事情。
程序化渲染方式是创建一个功能:
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();
}
组件有自己的上下文,但通常共享一些功能 来自父组件类型。下表展示了这些上下文变量:
| 钥匙 | 描述 |
|---|---|
|
组件后的值渲染其结果。 |
|
组件名称——也就是它的名称。 |
|
组件可能的消息集。 |
|
信息的层级——其中之一 |
|
返回 |
|
返回 |
|
返回 |
|
原始用户输入。 |
| 钥匙 | 描述 |
|---|---|
|
组件名称——也就是它的名称。 |
|
原始用户输入——主要用于过滤。 |
|
完整的物品清单如下。 |
|
可见的物品列表上写着。 |
|
返回 |
|
选择器当前的光标行。 |
| 钥匙 | 描述 |
|---|---|
|
终端的宽度类型为整数,如果未设置,默认为NULL。 |