2017-11-28 11:16

quartz 本身就支持分布式,只要直接用上就可以了。

jfinal 确实有不少人封装过 quartz,即便如此,分布式的用法仍然是 jfinal 无法干预的,仍然无法避免去学习 quartz 的分布式的用法

封装往往只是为了整合更快,但其中的功能通常是不封装的,因为如果一个第三方做得够好,一是没有封装的必要,二是封装以后又得学习封装好以后的这套 API,徒增学习成本

总结一下就是,在 jfinal 中直接用上 quartz,用到它的分布式的功能,直接看他的文档就可以了

2017-11-28 11:13

@Yiww order by 不支持问号占位,这个是 JDBC 决定的,不是 jfinal 可能控制的。

order by 要动态,完全可以通过传参的方式, cond.set("order", "order by update_time desc, other_field asc")

然后在模板中用 #(order) 来输出即可

2017-11-28 10:49

这样配置一下就可以了:
activeRecordPlugin.setContainerFactory(new OrderedFieldContainerFactory());

2017-11-28 10:45

不是maven ,只要删掉 jetty-server-8.1.8.jar 包就可以了。 但是你如果自己添加过有关 jsp、jstl 相关 jar 包,也要删掉,原因与前面谈的本质上一样

在 jfinal 的角度,非 maven 项目,只提供过 jetty-server-8.1.8.jar 这个 jar 包,但仍然无法阻止你自己额外添加 jsp、jstl 相关的 jar 包,这点就是在删了 jetty-server jar 包以后,解决问题的关键

2017-11-28 10:40

NullPointerException 并没有什么高招,单步调试,找到那个为 null 的对象,解决之

2017-11-28 10:40

改造一下 FackStaticHandler,在里面添加 对于前台后台的判断,分别做处理,大致这样:
if (target.startsWith("/admin")) {
// 后台直接跳过,不做伪静态
next.handle(...);
} else {
// 前台做伪静态
伪静态代码写在这里
}

2017-11-27 18:35

@嗷嗷嗷 多个 servlet 版本的 jar 包冲突了,如果你是 maven 项目打包出来的,那很可能是 jetty 的关联 jar 包没删干净

打包之前将对 jetty server 的依赖的 scope 改 provided 解决

也就是说maven 项目下, jetty-server 这个依赖会传递依赖很多其它的 jar 包,打 war 包时会全打进去

2017-11-27 18:33

sql 有错误, order by 要放在最后面。

可以通过 activeRecordPlugin.setShowSql(true) 将 sql 输出到控制台,观察 sql 到底是什么样,将 sql 改对了就可以了

2017-11-27 18:30

@bujj 使用的是上次的 class 文件而已,这个一点也不罕见,将 class clear 掉,重新编译即可

2017-11-27 18:29

如果你是用的 redirect,添加一个 true 参数即可:
redirect(url, true)

2017-11-27 18:28

控制层的拦截器是自动触发的,业务层的拦截器必须要进行 enhance 才可以触发

你碰到的业务层拦截器被触发了,必定是当前业务对象被 enhance 了,只是不太容易被察觉而已,单步调试找到原因即可

2017-11-27 18:26

这个是分布式与集群的范畴了,这个问题无法三言两语说清楚。 如果是共享的一个数据库,做好事务是最基本的,内存中不要放临时数据,使用数据库中集中的数据

2017-11-27 18:23

@Jeese 建议一个最简单的办法:
1:在首页右侧下载 jfinal-3.2-demo-for-maven.zip 这个项目
2:解压以后,导入 IDEA,IDEA 会自动生成所有配置
3:根据 JFinalDemoConfig 中 main 方法中的注释说明直接启动项目

利用上述方法创建好项目,可以推导出来:只要将项目事先建成 maven 结构的,直接导入 IDEA 中就建好了项目,可以代替其它创建项目的方式

这个在当前 git 普及的情况下是极其有用的,因为 git 上的项目通常是 maven 结构给到你

2017-11-27 18:21

这个好多人需要,点赞、收藏

2017-11-27 18:16

除了 inv.getActionKey() 还有如下实用的方法可以使用:
inv.getMethodName()
inv.getControllerKey()

甚至可以获取controller 中的 Method 以及上面的注解:
inv.getMethod()
inv.getMethod().getAnnotation()

还可以获取 controller 类上的注解:
inv.getController().getClass().getAnnotation()

获取到了上述的注解,尽情发挥想象力