此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Shell 3.3.0Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Shell 3.3.0Spring中文文档

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

如果您不需要做任何复杂的事情,模板是一个不错的选择 您只想稍微修改现有的组件布局。渲染 然后,通过代码,您可以灵活地执行任何需要操作。Spring中文文档

以编程方式呈现的方法是创建一个:FunctionSpring中文文档

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中文文档

@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中文文档

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

resultValueSpring中文文档

组件呈现其结果后的值。Spring中文文档

nameSpring中文文档

组件的名称,即其标题。Spring中文文档

messageSpring中文文档

为组件设置的可能消息集。Spring中文文档

messageLevelSpring中文文档

消息的级别 — 、 或 之一。INFOWARNERRORSpring中文文档

hasMessageLevelInfoSpring中文文档

如果 level 为 ,则返回 。否则为 false。trueINFOSpring中文文档

hasMessageLevelWarnSpring中文文档

如果 level 为 ,则返回 。否则为 false。trueWARNSpring中文文档

hasMessageLevelErrorSpring中文文档

如果 level 为 ,则返回 。否则为 false。trueERRORSpring中文文档

inputSpring中文文档

原始用户输入。Spring中文文档

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

nameSpring中文文档

组件的名称,即其标题。Spring中文文档

inputSpring中文文档

原始用户输入 — 主要用于筛选。Spring中文文档

itemStatesSpring中文文档

项目状态的完整列表。Spring中文文档

itemStateViewSpring中文文档

项目状态的可见列表。Spring中文文档

isResultSpring中文文档

如果上下文处于结果模式,则返回。trueSpring中文文档

cursorRowSpring中文文档

选择器中的当前光标行。Spring中文文档

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

terminalWidthSpring中文文档

终端的宽度,类型为 Integer,如果未设置,则默认为 NULLSpring中文文档