單項選擇
單項選擇元件要求使用者從列表中選擇一個專案。它類似於一個簡單的下拉框實現。以下列表顯示了一個示例
@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;
}
}
以下螢幕截圖顯示了單項選擇元件的典型輸出
上下文物件是 SingleItemSelectorContext
。下表描述了其上下文變數
鍵 | 描述 |
---|---|
|
元件存在時返回的值。 |
|
可見的專案,其中 rows 包含名稱和所選項的對映。 |
|
父上下文變數 (參見 SelectorComponentContext 模板變數)。 |
您可以透過定義要公開的專案來預先選擇一個專案。如果您知道預設值並讓使用者只需按 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);