对于最新的稳定版本,请使用 Spring Shell 3.3.3! |
单选
单个 select 组件要求用户从列表中选择一个项目。它类似于简单的 Dropbox 实现。下面的清单显示了一个示例:
@ShellComponent
public class ComponentCommands extends AbstractShellComponent {
@ShellMethod(key = "component single", value = "Single selector", group = "Components")
public String singleSelector() {
SelectorItem<String> i1 = SelectorItem.of("key1", "value1");
SelectorItem<String> i2 = SelectorItem.of("key2", "value2");
List<SelectorItem<String>> items = Arrays.asList(i1, i2);
SingleItemSelector<String, SelectorItem<String>> component = new SingleItemSelector<>(getTerminal(),
items, "testSimple", null);
component.setResourceLoader(getResourceLoader());
component.setTemplateExecutor(getTemplateExecutor());
SingleItemSelectorContext<String, SelectorItem<String>> context = component
.run(SingleItemSelectorContext.empty());
String result = context.getResultItem().flatMap(si -> Optional.ofNullable(si.getItem())).get();
return "Got value " + result;
}
}
以下截屏视频显示了单个 select 组件的典型输出:
上下文对象是 .下表描述了其上下文变量:SingleItemSelectorContext
钥匙 | 描述 |
---|---|
|
组件存在时的返回值。 |
|
可见项,其中 rows 包含名称和选定项的映射。 |
|
父上下文变量(请参阅 SelectorComponentContext 模板变量)。 |
您可以通过定义项目来预先选择项目以进行公开。这是
如果您知道 default 并允许用户仅按 进行选择,则很有用。
下面的清单设置了一个默认值:Enter
SelectorItem<String> i1 = SelectorItem.of("key1", "value1");
SelectorItem<String> i2 = SelectorItem.of("key2", "value2");
List<SelectorItem<String>> items = Arrays.asList(i1, i2);
SingleItemSelector<String, SelectorItem<String>> component = new SingleItemSelector<>(getTerminal(),
items, "testSimple", null);
component.setDefaultExpose(i2);