2020-03-23 16:32

上面的具体用法,参考 com.jfinal.template.ext.directive 包下面的 StringDirective.java

该指定是 #string() ... #end 指令,其中的 exec 方法就用了新的变量接管了输出,并没有向原本的 writer 中输出

2020-03-23 16:31

看不出来是哪关闭输出流了

建议像尝试下面的代码:
StringWriter sw = new StringWriter();
String content = template.render(scope.getData(), fsw).toString();

还可以进一步改进:
其实 Template 没必要 new 出来,而是只需要替换输出参数就可以了,例如:
CharWriter charWriter = new CharWriter(64);
FastStringWriter fsw = new FastStringWriter();
charWriter.init(fsw);
try {
stat.exec(env, scope, charWriter);
String content = fsw.toString();
} finally {
charWriter.close();
}

上面的代码,使用你自己 new 出来的 CharWriter 来接管 stat 执行时的输出

2020-03-23 16:08

@去冰正常甜 如果你要做得更严格点,可以在 Db.update(...) 执行建表语句以后,再使用 Db.find(...) 来验证:
try {
Db.update( 建表 sql );
Db.find("select * from " + tableName + " limit 1");
}
catch(Exception e) {
建表失败
}

Db.find 去尝试刚刚建的表是否存在,如果不存在则肯定报 table 不存在的异常出来

将上面的代码封装在一个工具类中更好

2020-03-23 16:05

@去冰正常甜 对于建表语句, Db.update(...) 的返回值是不可靠的,不要依赖于这个值

2020-03-23 15:37

@小白菜111 jfinal weixin 2.5 发布到中心库,但未发新闻,也未发 changelog

一般小版本都不发这些

2020-03-23 15:33

@去冰正常甜 建表语句,如果不抛出异常,你可以认为是成功了

而且建表语句是不能使用事务功能的,也就是说建表用的 sql 与其它数据库操作无法在同一个事务中回滚,这个是数据库的决定的

2020-03-23 15:32

@jounzhang 放入外部用 #include 是个很好的办法,同时也有利于分开管理

2020-03-23 14:46

idea 的格式化功能能否针对 enjoy 的指令进行配置?

2020-03-23 14:39

用一个拦截器就可以了,参考文档频道的拦截器的使用

2020-03-23 14:39

不同数据库行为可能不同,需要你自己试用一下

2020-03-23 11:42

以上是 jfinal.com 官网的 nginx ssl/https 配置片段:
server {
listen 80;
listen 443 ssl http2;
keepalive_timeout 70;

server_name jfinal.com www.jfinal.com;
root /app/web/jfinal-com/webapp;

ssl_certificate cert/20200618_www.jfinal.com.pem;
ssl_certificate_key cert/20200618_www.jfinal.com.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

以下是 location 配置......
}

其中 /app/web/jfinal-com 就是本站的 jfinal undertow 项目下的 web 项目

以上配置基本上是可以照抄的,几乎是最简洁的 nginx ssl/https 配置,既支持 https,还支持 http2 , 极大提升访问速度

注意 listen 443 ssl http2; 是最简洁的 ssl/https 配置

第一行的 listen 80; 是在支持 https 的基础上再支持 http,最简洁的配置

2020-03-23 11:35

只需配置其中一个

如果配置 nginx 上的 ssl/https, 那么就不需要配置 undertow

如果配置了 undertow 就不需要配置 nginx,并且不能让 nginx 来代理。因为如果让 nginx 来代理,意味着用户的请求先到达 nginx,那么就需要 nginx 支持 ssl/https

所以,最终的结果是,如果安装了 nginx 并用了它的代理,就必须在 nginx 上配置 ssl/https。 当 nginx 不存在时,单独配置 jfinal undertow 的 ssl/https 即可

2020-03-23 11:30

@zhangtianxiao 挺爽,收藏一下

2020-03-23 11:11

这种用法在较低版本中能否使用?

2020-03-23 11:09

@时光飞逝TL 这个是由 http 协议决定的,协议中规定对于 multipart request 请求,其中的数据格式是特定规则的,所以需要调用 getFile() 去解析这个规则下的数据