2019-07-23 12:12
@瑟瑟发抖的小菜鸟 以 jfinal 官方的 jfinal_demo_for_maven 为例,用下面的方式来理解,以免绕远了:
1:下面两行代码会将 _layout.html、_paginate.html 中定义的 #define layout()、#define paginate() 这两个模板函数给 "搞成" 全局的
me.addSharedFunction("/common/_layout.html");
me.addSharedFunction("/common/_paginate.html");
2:你的 render("blog.html") 调用中的 blog.html 中的第一行代码是:
#@layout()
上面这行代码调用了前面提到的被 "搞成" 全局的 #define layout() 模板函数
3:现在程序走到了 _layout.html 中的 #define layout() 中,继续往下走,会走到:
#@main()
上面的代码会调用你在 blog.html 中定义的 #define main() 模板函数
其实整个流程,你就当成 java 里头的方法定义与方法调用
2019-07-23 11:28
@1234567856756745 jfinal 诞生超过八年多时间,从未碰到过这类问题
看来这个问题,只能是你仔细排查, 404 的问题太好排查了
大不了你做个远程调试:
http://www.jfinal.com/share/1528
http://www.jfinal.com/feedback/5106
2019-07-23 10:54
@瑟瑟发抖的小菜鸟 笔误, #define layout() 是 _layout.html 中定义的,在 blog.html 中调用的是 #@layout()
笔误已在回复中更正
2019-07-23 09:38
关键在于 DemoConfig.java 中的下面代码:
public void configEngine(Engine me) {
me.addSharedFunction("/common/_layout.html");
me.addSharedFunction("/common/_paginate.html");
}
me.addSharedFunction(...) 方法会将 .html 中的所有 #define xxx() 定义的模板函数给 "搞成" 全局的
所以你在任意页面都可以调用 _layout.htm 中的 #define layout() , 在任意页面都可以调用 _paginate.html 的 #define paginate(...)
目光回到你的 controller 中的 render("blog.html"),在 blog.html 中你会看到 #@layout() 这类调用,就是在调用前面提到的全局模板函数
这个逻辑并不复杂,就是先添加全局函数,然后任何地方调用
2019-07-22 10:40
@xkcoding 项目在 gitee.com 有在 gitee.com 上放过一份没?
jfinal 在 gitee.com 的流量很大,如果 jfinal-justauth-demo 在 gitee 上有副本,我可以 fork 一份过去,可以增加此项目的关注度
2019-07-22 10:29
@你妹啊 renderQrCode("http://www.jfinal.com");
不能再简单了
2019-07-22 09:23
@Dreamlu 思路独特、巧妙,将代码提前写好,等待打包后生成的文件,从未见过在编译有人这么用过,赞
2019-07-21 17:05
@supadmin 注释掉 DemoConfig 中的那行出错代码即可,你不使用 undertow ,那行代码就是多余的了