2019-05-13 11:07

engine.setToClassPathSourceFactory() 这行代码指定了从 class path 以及 jar 包内读取模板

那么 getTemplate 的时候,使用的路径是相对于 class path 的根目录,以及 jar 包的根目录

但是你的模板目录是 "E:\code\jfDemo\target\WEB-INF\classes\tpl\"

上面两个目录再以 clas path 或 jar 包为根目录, 就错到十万八千里去了。因为你的 class path 已经处在 "E:\code\jfDemo\target\WEB-INF\classes\" 之下

应该使用:
engine.getTemplate("tpl/demo.tpl");

2019-05-12 22:12

可以做得更通用一点,做成 ActionDirective,可以接受一个 url 参数,这么来用:
#action("/image/getHotelImage")

感谢分享,期待再出一个异步版本的

2019-05-11 23:05

这类 setter、getter 方法全是由生成器自动生成的,不要手动去改

重新运行一次那个生成器中的 main 方法即可自动化搞定

2019-05-11 11:11

@zz210891470 单步调试一下找原因, 目前从表面上看是没问题的

2019-05-10 19:39

信息量不足,不好猜

2019-05-10 19:38

jfinal 官方并未提供过 QuartzPlugin 这个插件,我也完全不了解这个插件

只能是找找这个插件的作者问一下,或者自己单步调试找找原因

2019-05-10 19:36

@好好学习1111 记得搞定后回来分享一下,在分享频道:
jfinal.com/share

2019-05-10 17:34

这个功能实现起来很容易,在 enjoy 之下扩做一个 #action 指令即可,然后这么来用:
#action("/blog/list")

具体实现有两种方式:
1:同步方案
让 #action 指令先得到目标 action 内容,再将内容直接输出,最简单粗暴的代码为:
public class ActionDriective extends Directive {
public void exec(Env env, Scope scope, Writer writer);
String action = exprList.eval(scope).toString();
String actionResult = HttpKit.get("localhost" + action);
write(writer, actionResult);
}
}

2:异步方案
让 #action 指令只生成一断 ajax 异步请求后端 action 的 js 代码,让其异步加载 html 片段,纯粹生成一段 js 代码而已,以下是一段示意性代码
$.ajax(action, {
type: "GET"
, cache: false
, dataType: "html"
, success: function(ret) {
// 得到当前位置的父标签,然后将 ajax 返回值插入进来
$(this).parent().append(ret);
}
});

在 action 指令内部生成以上 js 代码是极其容意的,js 代码的具体细节还需要你自行调整,以上仅为示意

最后配置一下:
engine.addDirective("action", ActionDirective.class);

从用户体验的角度来说,使用异步方案为好

2019-05-10 17:16

freemarker 的这种用法是在用 freemarker 的语法来写 java 代码该写的逻辑,建议使用 jfinal enjoy 模板的 shared method 或者 shared object 扩展来解决,代码最简洁,性能也最好,试用一次便知

2019-05-10 16:55

@opal #define 可以通过 #set(key, value) 将值返回

2019-05-10 16:54

我猜你可以在模板中使用一下 #render(...) 以及 #include(...)

2019-05-10 16:54

功能是一定可以实现的,就是不知道 struts 的 s:action 的具体功能是什么

2019-05-10 16:49

enjoy 拥有多种扩展方式,早就覆盖掉 freemarker 的模板方法功能了

试用一下 #define 定义模板函数,以及 shared object、shared method 扩展,第一种扩展只需要 5 分钟学会,第二、第三种只需要一分钟学会

2019-05-10 16:25

@李明明 细节问题,单步调试,不要猜谜