Spring壳组件未显示

mklgxw1f  于 2022-12-10  发布在  Spring
关注(0)|答案(1)|浏览(88)

我尝试使用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运行这个程序,但是没有用。

qzwqbdag

qzwqbdag1#

问题是我使用的是内部IntelliJ终端,而不是正确的终端。

相关问题