2018-05-28 16:14

@坩埚 注意,你只需要在 response.setHeader("Content-Security-Policy","img-src 'self'"); 后面继续添加 response.setHeader(...) ,并不需要再创建新的 Handler

2018-05-28 16:14

@坩埚 缺啥 header 就添加啥 header,此外你要注意 setHeader 与 addHeader 的区别,如果你某一个 header 是一次性添加的,使用 setHeader 即可,否则使用 addHeader

2018-05-28 15:54

@fmpoffice 这就奇怪了 enjoy 的异常都会指出哪一行出的错,你用的哪个版本的 jfinal ?

2018-05-28 15:39

找一下 jfinalUIB 的作者,或者加入 jfinalUIB 的群

2018-05-28 15:35

@ben0133 在 java 8 下使用 Db.tx 可以使用 lambda 表达式,使用起来代码会更简洁:
public void test() {
final Ret ret = Ret.create();
Db.tx(() -> {
Db.update("update ta set f1 = ?", 123);
Db.update("update tb set f2 = ?", 456);
ret.set("key", 123); // 使用 ret 带回点数据
ret.set("msg", "xxxx"); // 使用 ret 带回多个数据
return true; // 返回 true 提交事务
});
}

上面的例子还演示了通过一个 final Ret 局部变量从 lambda 表达式中带回返回值的使用方法,返回多个值的需求也可以很方便地解决

2018-05-28 15:29

@rirai jfinal 3.4 已发布,所以 @玛雅牛 的shiro 插件可以直接使用了,而不必从 3.3 降级到 3.2 了

2018-05-28 15:26

@lyh061619 这个是 oracle 驱动的 bug,不太好调整,因为getPrimaryKeys() 方法返回来的是不是主键,这个在 jfinal 这头是无法判断的

2018-05-28 15:25

好多事情,还没顾上,用下面这个方法先顶一顶:
在 baidu 的搜索框里头输入:
site:jfinal.com 关键字

2018-05-28 14:23

@syso 具体的代码分享出来啊,修改这个帖子,追加内容就好

2018-05-28 11:00

@ben0133 对,我个人是建议使用 Db.use(...).tx(...) 做事务,控制起来比较方便

现在很多项目是互联网项目,需要开启事务的地方并不多,大部分请求不需要开启事务,所以使用 Db.tx(...) 是很合适的

如果是一个内部的业务系统,并且大部分业务需要开启事务的话,使用拦截器开启事务,并配合一个全局拦截器 try catch 事务抛出的异常,并响应合适的 json/view 是最方便的

2018-05-28 10:56

@snakelenas 回看了你以前的贴子,发现很久以前你还提过一个 JFinalJson 的性能问题,后来改进过了, 感谢你的建议

以后碰到啥问题,一定要提出来

生成级链属性的这个分享,目前的需求量还不够大,如果后续需求很强烈的时候会考虑添加这个功能

2018-05-28 10:12

这个 API 在 RedisPlugin 中没有加进去,可以稍微写点代码来实现:
1:Redis.use().getJedis() 获取 Jedis 对象
2:通过 Jedis 调用上的订阅发布方法实现功能
3:最后别忘了在 finally 块中调用一下 Jedis.close() 回收资源

如果这个方法要经常用,建议添加一个 RedisKit 工具类,里面添加工具方法,方便随时使用

2018-05-28 09:52

@lyq027 啥意思, show me the code

2018-05-27 22:43

@山东小木 Writer 一开始是用的 java.io.Writer ,后来改成自己的带有缓冲区的设计 com.jfinal.template.io.Writer,沿用了 java 的方法原型

2018-05-27 22:13

@山东小木 setExprList 的 if 可以再省点代码,可去掉所有 null 的赋值,例如:

if (paraNum == 1) {
this.urlExpr = exprList.getExpr(0);
} else if (paraNum == 2) {
this.urlExpr = exprList.getExpr(0);
this.portalIdExpr = exprList.getExpr(1);
} else if (paraNum == 3) {
this.urlExpr = exprList.getExpr(0);
this.portalIdExpr = exprList.getExpr(1);
this.autoLoadExpr = exprList.getExpr(2);
}


outputNothing() 这个方法内部可以留空,什么也不写,因为 writer.write("") 等价于啥也不输出