2019-05-13 15:38
me.setBaseDownloadPath(...) 没有配置时,renderFile 默认以 webapp/download 为根去找文件
Constants.java 源代码的 setBaseDownloadPath(...) 已经说的很详细:
设置文件下载基础路径,当路径以 "/" 打头或是以 windows 磁盘盘符打头, 则将路径设置为绝对路径,否则路径将是以应用根路径为基础的相对路径
例如:
1:参数 "/var/www/download" 为绝对路径,下载文件存放在此路径之下
2:参数 "download" 为相对路径,下载文件存放在 PathKit.getWebRoot() + "/download" 路径之下
你可以选择是以相对路径还是绝对路径配置一下,然后 renderFile 给定好参数即可
2019-05-13 13:21
@太岳三清峰 没错
这里要注意一个问题,你的 batchSize 指定的是 100,那么每次在 100 条数据执行完成后就会提交一次事务,如果你的数据多余 100 条,那么会提交多次事务,事务提交后是不能回滚的,所以多次提交事务,如果后面出现异常,那么已提交的事务是不能回滚的
如果希望所有操作全在一个事务中,可以将 batchSize 弄成与数据量一样的值,例如:
Db.batchSave("te_timeindex",indlist, indlist.size());
上面使用了 indlist.size() 作为 batchSize,那么 JDBC 在多数情况下只会提交一次数据
使用 indlist.size() 作为 batchSize 时,如果数据量特别大,例如超过 2 万行数据,那么 JDBC 仍然可能分批提交事务,这个可能与 mysql 配置的缓冲区大小有关, 一般几千条数据在一个 batch 中没事
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-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);
从用户体验的角度来说,使用异步方案为好