组件渲染

你可以用两种方式实现组件渲染:完全渲染 无论是程序化还是使用 ANTLR 字符串模板。 严格来说,有一种简单的功能渲染器界面 该上下文作为输入和输出,包含一个列表属性字符串. 这让你可以在模板和代码之间做选择。spring-doc.cadn.net.cn

如果你不需要做复杂的事情,模板是个不错的选择 你只需要稍微修改现有组件布局。渲染 通过代码,你就能灵活地做任何需要做的事情。spring-doc.cadn.net.cn

程序化渲染方式是创建一个功能:spring-doc.cadn.net.cn

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());
	}
}

然后你可以把它连接到一个组件:spring-doc.cadn.net.cn

@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();
}

组件有自己的上下文,但通常共享一些功能 来自父组件类型。下表展示了这些上下文变量:spring-doc.cadn.net.cn

表1。TextComponentContext 模板变量
钥匙 描述

结果值spring-doc.cadn.net.cn

组件后的值渲染其结果。spring-doc.cadn.net.cn

名称spring-doc.cadn.net.cn

组件名称——也就是它的名称。spring-doc.cadn.net.cn

消息spring-doc.cadn.net.cn

组件可能的消息集。spring-doc.cadn.net.cn

messageLevelspring-doc.cadn.net.cn

信息的层级——其中之一信息,警告错误.spring-doc.cadn.net.cn

hasMessageLevelInfospring-doc.cadn.net.cn

返回true如果水平为信息.否则,就是错误的。spring-doc.cadn.net.cn

hasMessageLevelWarnspring-doc.cadn.net.cn

返回true如果水平为警告.否则,就是错误的。spring-doc.cadn.net.cn

hasMessageLevelError(信息层级错误)spring-doc.cadn.net.cn

返回true如果水平为错误.否则,就是错误的。spring-doc.cadn.net.cn

输入spring-doc.cadn.net.cn

原始用户输入。spring-doc.cadn.net.cn

表2。SelectorComponentContext 模板变量
钥匙 描述

名称spring-doc.cadn.net.cn

组件名称——也就是它的名称。spring-doc.cadn.net.cn

输入spring-doc.cadn.net.cn

原始用户输入——主要用于过滤。spring-doc.cadn.net.cn

条目状态spring-doc.cadn.net.cn

完整的物品清单如下。spring-doc.cadn.net.cn

itemStateViewspring-doc.cadn.net.cn

可见的物品列表上写着。spring-doc.cadn.net.cn

结果spring-doc.cadn.net.cn

返回true如果上下文处于结果模式。spring-doc.cadn.net.cn

游标spring-doc.cadn.net.cn

选择器当前的光标行。spring-doc.cadn.net.cn

表3。ComponentContext 模板变量
钥匙 描述

终端宽度spring-doc.cadn.net.cn

终端的宽度类型为整数,如果未设置,默认为NULLspring-doc.cadn.net.cn