关于模板引擎文件名问题

使用模板引擎渲染文件的时候,模板文件都在classpath:templates文件夹中,也就是项目目录下的resources/templates,但是我在渲染模板的时候经常会遇到找不到文件的情况

这是模板引擎的配置

public void configEngine(Engine me) {
    me.setDevMode(true);
    me.setToClassPathSourceFactory();
    me.setBaseTemplatePath(null);
    Engine.setFastMode(true);
    me.setCompressorOn('\n');
    me.setSourceFactory(new MyClassPathSourceFactory());
    me.setEncoding(StandardCharsets.UTF_8.name());
}

MyClassPathFactory我只加了一条输出baseTempPath/fileName/encoding的指令

当我启动项目的时候AdminController能够正常渲染模板,

public class AdminController extends Controller {

    @Before(LoginInterceptor.class)
    public void index(){
        render("/templates/index.html");
    }
}

这样输出正常,但是我换了个控制器输出模板的时候就发生了文件找不到的情况,

render("templates/approve/deny.html");

在ApproveController中渲染模板时就出现了无法找到模板文件,并且输出的fileName也变成了/approve/deny.html,前面的/templates路径不见了


请问该如何解决

评论区

lyh061619

2020-07-10 11:06

注意翻阅文档:https://jfinal.com/doc/6-2

小鞠由依

2020-07-10 12:52

@lyh061619 没看出什么问题,大佬能详细说下么

JFinal

2020-07-10 14:30

你配置了下面这两个东东:
me.setToClassPathSourceFactory();
me.setSourceFactory(new MyClassPathSourceFactory());

其中第二个配置会覆盖掉第一个配置,因为这两个都是在配置 SoruceFactory


此外,如果你的模板在 classpath:templates文件中,可以这样配置:
me.setBaseTemplatePath("/templates");
me.setToClassPathSourceFactory();

然后用的时候就可以省去 "/templates" 目录,例如:
render("/index.html");

小鞠由依

2020-07-11 11:25

@JFinal 解决了,谢谢

热门反馈

扫码入社