2019-06-13 12:08
@bafurei jfinal 的 Controller.render(Render render) 方法是开放式结构,可以任意扩展出自己需要的 Render
默认的 CaptchaRender 无法在你的 ubuntu 上使用,找一个第三方的代码扩展出一个 MyCaptchaRender 出来就挺好
2019-06-13 11:57
@zhongloyal 还是不对,info(+) 这种东东从来就没有过
第一行文字中是黑黑的一行,里面没东西,如果提问都这么马虎,那回答者没有理由回复
回答者还在要求你如何将问题改对,要求提供信息量,这个是很不可思议的事情
2019-06-13 11:12
@bafurei 可能是 ubuntu 的少了字体文件,或者是图片 api 支持有问题
试试这个:
render(new com.jfinal.ext.render.CaptchaRender("_jfinal_captcha"));
也可以自己扩展一个 CaptchaRender 出来,然后
render( new MyCaptchaRender());
2019-06-12 22:46
@成陈 事务问题比较复杂,如果你用的 mysql , 首先要检查当前 table 是不是 InnoDb 引擎,myisam 引擎不支持事务
然后,你的 Db.tx 中有没有吃掉过异常,也就是说有没有 try catch,并且没有再次抛出异常
然后,Db.tx 中的数据库操作是不是将数据从数据库读到内存,然后在内存中操作,再写回数据库,这种操作需要的事务级别较高,例如:
Db.tx(...
int cash = Db.queryInt("select cash from account where id = ?", 123);
cash = cash + 100;
Db.update("update account set cash = ? where id = ?", cash, 123);
return true;
);
由于上面操作 cash 字段是先读到内存中进行,然后再存回数据库,所以需要的事务级别很高,否则会现现幻读
改进的办法是:
Db.tx(...
Db.update("update account set cash = cash + 100 where id = ?", 123);
return true;
);
也就是说,所有真正的数据操作全交给了数据库,不经过内存
2019-06-12 22:32
其实异常信息已经很明确了,只有 List、数组、Map 才可以使用 index 表达式
所谓 index 表达式是指带有方扩号和下标的表达式,例如: map[123]、list[456]
而你的 incApply 是一个 model , 是决然不能使用 index 表达式的
至于 Db.query 方法,当 select 后方只有一个字段时返回 List 《Object》,当有多个字段时返回 List《Object[]》
Db.query 方法将原值返回数据不进行封装, 而 Db.find(...) 方法将返回值封装到 Record 对象中去
其实这些东东,单步调试看一下变量类型就全清楚了
了解 jfinal 最好的办法就是单步调试,看程序在动态中的行为与数据