jfinal整合springboot无法渲染html找不到路径

为什么找不到路径

@Configuration
public class SpringBootConfig {
    @Bean(name = "jfinalViewResolver")
    public JFinalViewResolver getJfinalViewRrsolver() {
        JFinalViewResolver jfr = new JFinalViewResolver();

        jfr.setSourceFactory(new ClassPathSourceFactory());
//        jfr.setPrefix("/templates/");
        jfr.setSuffix(".html");
        jfr.setContentType("text/html;charset=UTF-8");
        jfr.setOrder(0);
//        jfr.addSharedFunction("/view/common/_layout.html");


// 获取 engine 对象,对 enjoy 模板引擎进行配置,配置方式与前面章节完全一样
        Engine engine  = JFinalViewResolver.engine;

        // 热加载配置能对后续配置产生影响,需要放在最前面
        engine.setDevMode(true);

        // 使用 ClassPathSourceFactory 从 class path 与 jar 包中加载模板文件
        engine.setToClassPathSourceFactory();

        // 在使用 ClassPathSourceFactory 时要使用 setBaseTemplatePath
        // 代替 jfr.setPrefix("/view/")
        engine.setBaseTemplatePath("/templates/");

        return jfr;
    }
}

image.png

还有个问题是,我现在有个需求是发邮件,邮件用enjoy做模板

我必须写绝对路径才找得到模板

String tempPath = PathKit.() + Template template = Engine.().getTemplate(tempPath)

我就不能直接,这样找到模板吗?

Template template = Engine.use().getTemplate("test.html");

如果这样的话我打包到jar里路径都不一样了还怎么整?

我希望是全部让我放到res目录下我不用关心上面的绝对路径怎么做

评论区

JFinal

2023-10-04 16:33

在 SpringBootConfig 配置的 Engine 对象与你 Engine.use() 获取到的是不同的对象,有两种办法,一种是使用前者:
JFinalViewResolver.engine.getTemplate("test.html");

另一种是先配置:
Engine.use().setToClassPathSourceFactory().setBaseTemplatePath("/templates/");

然后再使用:
Engine.use().getTemplate("test.html");

Enjoy 模板的各个 Engine 对象是独立配置的,可分别用于不同的用途,知道这点就能轻松拿捏了