Jade4J: 没有那个文件或目录

Jade4J: No such file or directory

我尝试在我的 Java Spring 应用程序中实施 Jade4J。不幸的是它找不到模板文件。

JadeConfig.java

@Configuration
@EnableWebMvc
public class JadeConfig {
    @Bean
    public SpringTemplateLoader templateLoader() {
        SpringTemplateLoader templateLoader = new SpringTemplateLoader();
        templateLoader.setBasePath("classpath:/templates/");
  templateLoader.setEncoding("UTF-8");
        templateLoader.setSuffix(".jade");
        return templateLoader;
    }
  
    @Bean
    public JadeConfiguration jadeConfiguration() {
        JadeConfiguration configuration = new JadeConfiguration();
        configuration.setCaching(false);
        configuration.setTemplateLoader(templateLoader());
        return configuration;
    }

    @Bean
    public ViewResolver viewResolver() {
        JadeViewResolver viewResolver = new JadeViewResolver();
        viewResolver.setConfiguration(jadeConfiguration());
        return viewResolver;
    }
}

Controller.java

@RestController
@RequestMapping("/users")
public class UserController {
  @GetMapping("/test")
    public static String render() throws JadeCompilerException, IOException {
      List<Book> books = new ArrayList<Book>();
      books.add(new Book("The Hitchhiker's Guide to the Galaxy", 5.70, true));

  Map<String, Object> model = new HashMap<String, Object>();
  model.put("books", books);
  model.put("pageName", "My Bookshelf");
  
  return Jade4J.render("index", model);
 }
}

一直显示错误“(没有这样的文件或目录)”。知道这里有什么问题吗?

  1. 你应该有一个 @Controller,而不是 @RestController(对于 Json,XML),因为你正试图用 Jade 渲染 HTML。
  2. 不要自己调用 Jade4Render,而是 return 一个 reference to your template。然后Spring会为你做渲染。
  3. 不要将方法设为静态。

因此您的代码应该如下所示(前提是 classpath:/templates/ 中存在名为 index.jade 的文件)

@Controller
@RequestMapping("/users")
public class UserController {

  @GetMapping("/test")
  public String render(Model model) {

    // add something to the model here, e.g. model.put("books", books);
    return index;
  } 
}