我尝试使用Spring Shell的内置组件StringInput、PathInput、ConfirmationInput SingleSelect和MultiSelect。每次我尝试使用其中一个时,都会执行()方法,它们从AbstractComponent继承,没有任何内容显示,结果为空。我已经用调试器运行了run方法,问题似乎是我的getTerminal()调用组件的构造函数始终返回一个DumbTerminal。
下面是我从文档中使用的代码:
package com.example.demo;
import org.springframework.shell.component.StringInput;
import org.springframework.shell.component.StringInput.StringInputContext;
import org.springframework.shell.standard.AbstractShellComponent;
import org.springframework.shell.standard.ShellComponent;
import org.springframework.shell.standard.ShellMethod;
@ShellComponent
public class ComponentCommands extends AbstractShellComponent {
@ShellMethod(key = "component string", value = "String input", group = "Components")
public String stringInput(boolean mask) {
StringInput component = new StringInput(getTerminal(), "Enter value", "myvalue");
component.setResourceLoader(getResourceLoader());
component.setTemplateExecutor(getTemplateExecutor());
if (mask) {
component.setMaskCharater('*');
}
StringInputContext context = component.run(StringInputContext.empty());
return "Got value " + context.getResultValue();
}
}
作为我的主要方法,我使用了正常的 Spring Boot 应用程序:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
如果我像下面的代码那样替换getTerminal(),则会显示提示符,但是我键入的文本会覆盖提示符,并且我无法按Enter键。
Terminal terminal = TerminalBuilder.builder()
.system(false)
.streams(System.in, System.out)
.build();
StringInput component = new StringInput(terminal, "Enter value", "myvalue");
我也试过从一个实际的终端而不是我的IDE运行这个程序,但是没有用。
1条答案
按热度按时间qzwqbdag1#
问题是我使用的是内部IntelliJ终端,而不是正确的终端。