2018-03-31 12:15

NullPointerException 太基础,多看看文档:
https://gitee.com/jfinal/jfinal-weixin/wikis

2018-03-31 11:42

数据库查询、复杂逻辑这类代码建议写在业务层,而不是在模板中去写

如果你一定要这么用,可以使用下面的办法:
1:在 YourJFinalConfig 中创建一个 afterJFinalStart() 方法,将 Db 注册进去:
public void afterJFinalStart() {
Engine engine = RenderManager.me().getEngine();
engine.addSharedObject("Db", Db.use());
}

然后就可以在 enjoy 中这样来用了:
#for( x : Db.find("select * from user where age > ?", 18))
#(x.name)
#(x.age)
#end

#set(user = Db.use("biz").findFirst("select * from t where name=?", name))
#(user.name)
#(user.age)

2018-03-31 11:38

jfinal 路由规则将 "." 视为静态资源直接转交给 tomcat、jetty 来处理

对于这类需求,建议使用样的路由:
"/download?file=pdfName.pdf"

2018-03-31 01:09

@badouyuren 这个异常是无法去避免的客户端的行为,而且在很多情况下属于正常行为,所以不需要处理。

例如客户端点击下载文件,下载到一半时点击取消下载。

再例如某个页面后台处理的时间较长,用户还没等到页面跳转就不等待去点击了别的链接

2018-03-30 20:36

@fmpoffice 看一下你手头的 club 项目源码,里头有一个 session 表,ehcache 也对 Session 对象进行了缓存,但持久化是放数据库中的

建议放数据库,不仅仅有利于持久化,而且方便做集群与分布式

2018-03-30 20:35

@fmpoffice 一直用的 ehcache 缓存数据到硬盘,从没出过问题

现在做项目新的方案是将所有数据放数据库,ehcache 仅仅起一个提速的作用,当 ehcache 中没有数据的时候去数据库读

2018-03-30 20:34

注意重启 tomcat 的时候用命令行:
shutdown.sh
shutdown.bat

不要强行 kill 杀进程,确保 ehcache 写回数据

2018-03-30 20:33

去掉 maxElementsOnDisk="0" 这个配置试试

2018-03-30 20:11

根据文档来配置:
https://gitee.com/jfinal/jfinal-weixin/wikis/JFinal-weixin%E4%B8%AD%E7%9A%84WeixinConfig%E9%85%8D%E7%BD%AE

注意文档中的这行代码:
ApiConfigKit.putApiConfig(ac);

对于多公众号来说,每个号都给一个 ApiConfig 进去,通过 ApiConfigKit.putApiConfig(ac); 来给定

2018-03-30 20:09

在 ehcache.xml 中添加一个配置就好:
diskPersistent="true"

至少 jfinal 3.3 现在依赖的 ehcache-2.6.6 是支持的

2018-03-30 19:14

new Date() 中是带有时、分、秒的,而不是你期望的只有 年、月、日

2018-03-30 19:14

参数用的 new Date(), 这个值让你的 where remind_date = ? 为真的可能性为 0,查不到数据才是最正确的结果

2018-03-30 18:39

@qin 参数传进来,用输出指令 #() 输出即可:
order by #(aaa) asc, #(bb) desc

多看看 jfinal enjoy 引擎文档,自然就会使用了

2018-03-30 15:46

TemplateRender 源码在这里可以拿到 3.4 版本的:
https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/render/TemplateRender.java

2018-03-30 15:45

@badouyuren 如果暂时不想升级,还可以拿到 jfinal 3.4 中的 TemplateRender.java 这个源代码,改名为 MyTemplateRender.java ,然后通过下面的代码进行切换:
public class MyRenderFactory extends RenderFactory {
public Render getRender(String view) {
render(new MyTemplateRender(view));
}

最后配置一下切换到新的实现:
me.setRenderFactory(new MyRenderFactory());

当然,如果你有 BaseController 的话,还可以在其中添加一个 render(String) 方法来覆盖父类实现:
public void render(String view) {
render(new MyTemplateRender(view));
}