2018-06-10 16:24

jfinal club 中只对需要的地方添加了事务处理,我个人习惯于使用 Db.tx(...) 来做事务

在项目中搜索一下 Db.tx 就可以搜得到这些地方

此外,如果你要使用 @Before(Tx.class) 来做事务,通常需要添加一个全局拦截器,拦截 @Before(Tx.class) 抛出的异常,然后根据异常的类型来决定 render(...) 到什么地方,或者 renderJson(...) 什么内容

如果你的项目中有很多地方要使用事务,使用 @Before(Tx.class) 再配合一个全局拦截器会比较方便,否则使用 Db.tx 会更方便

2018-06-10 11:35

@haojay 内容类型转换这个功能不好做,jfinal 社区的文章内容各自有 table 来存,没有改类型这个字段,需要新建 article ,并新建回复,还有 remind、refer 等关联,很麻烦

2018-06-10 09:35

CaseInsensitiveContainerFactory 这个一般不建议使用,程序还是严格点更好

如果一定要使用 CaseInsensitiveContainerFactory,也一定不要使用构造方法的参数,例如你上面使用时传入了 true 作为参数,这个会自动转换成小写

如果传入 false 会自动转成大写,如果不传则不转换

2018-06-09 20:36

@i++ Db.tx 内部已经 try catch 过了,在得到异常时会 rollback 回滚

你展示的这种情况是嵌套事务,也就是说在 Db.tx 外层还有 Db.tx 或者还有 @Before(Tx.class)。 这种情况当然不会回滚,因为这种情况是等着最外层的事务去回滚的

你去掉 Db.tx 外层的事务,就可以正确回滚了,不管外面是不是有 try catch 都可以

2018-06-09 20:21

@373118970 我不想将文档中的基础内容复制在这里

2018-06-09 17:58

getPara() 底层是从 Controller 中的 HttpServletRequest request 属性对象中获取值

但是这个 HttpServletRequest request 的作用域是当前请求,也就是说当前请求(主线程)在执行完毕后会回收或者销毁这个 request 对象

当你新创建的另一个线程去读取 request 对象中的数据时,必然是错误的

简单来说,将 controller 或者 request 对象传入另一个线程,一定是错误的,因为这两类对象的作用域是 “当前请求”,当前请求交互结束,对象生命周期立即结束

所以你在新创建的线程中是在使用一个无用的对象

正确的作法是先使用 getPara() 获取该获取的参数,然后传递给新创建的线程

2018-06-09 16:54

@周辉来也 jfinal club 会努力建设成为一个超值的增值服务,让每个加入俱乐部的小伙伴都觉得超值才可以

2018-06-09 10:59

你得这样改:
SimpleEmail email=new SimpleEmail();
email.setSSL(true);

此外,还有两个 setter 方法可以关注一下:
email.setSslSmtpPort(sslSmtpPort);
email.setSmtpPort(aPortNumber);

2018-06-09 10:16

看着像是在 main 方法中使用的 ActiveRecordPlugin ,而没有启动 web 项目,那么
public void configPlugin(Plugins plugins) 这个方法就不会被 jfinal 回调

进而 public void configPlugin(Plugins plugins) 中的一切代码相当于不存在,即便是手动调用了 configPlugin 方法,但 arp.start() 并没有回调

因此,你需要看一下文档中 《独立使用ActiveRecord》的章节:
http://www.jfinal.com/doc/5-15

2018-06-09 10:11

看一下 paginate 这个模板函数中的 #(append) 用法,就知道可以通过事先
#set(append = xxx) 来追加参数了

在调用 @#paginate(...) 之前添加下面的一行代码:
#set(append = "bn=232323")

如果后面的 232323 存放在了变量 value 中,这么来用:
#set(append = "bn=" + value)

如果要传递多个参数,这么来用:
#set(append = "bn=232323&aaa=123&bbb=456")

2018-06-09 10:03

没用过 PoiRender ,建议找找这个项目的作者问一下

2018-06-09 10:03

这个完全是输出的问题,输出值为 1.5777706E7 是数学上的科学计数法

如果你用的 jsp 或者 freemarkeer 找找它的文档中有关格式化输出的方法

此外,这个是反馈,错误地发布到了分享区域,过段时间会被删除,请知悉

2018-06-08 22:11

@maxwade 任务里头放个日志进去,看日志打印的时间对不对即可检验

2018-06-08 18:15

除了 TrialService me 是 public static 以外, 其它属性全部改成 private final,有如下好处:
1:防止外部访问,避免掉被置为 null
2:防止内部置它为 null