2018-01-07 21:10

补充一下为什么 jfinal 3.3 改变了 configPlugin() 原来的次序:是因为有人提出需求,希望从数据库中加载 configRoute() 中用到的配置项,也就是说希望在 configRoute() 方法中可以使用 ActiveRecordPlugin 的功能,而这个 ActiveRecordPlugin 是在 configPlugin() 中被加载的

一开始没想到这个调整会对 ShiroPlugin 有影响

2018-01-07 21:07

如果想更省事,还可以暂时用 jfinal 3.2 这个版本

2018-01-07 21:06

是由于 jfinal 3.3 将 configPlugin() 方法提到 configRoute() 之前调用造成的,最简单的解决办法是在 src/main/resources 目录下面创建一个 com.jfinal.core 的包,然后将 com.jfinal.core.Config.java 代码 copy 到那个包里,将 configRoute() 这行代码向前挪一个位置

jfinal 3.4 会解决这个问题

2018-01-07 17:24

你用的 tomcat 与 windows 太老了,难免有些问题,这个问题确实很诡异,感谢你的分享

我有一个与客户对接的 jfinal API 项目在阿里云上跑了快两年,从来没重启过。客户自己对接的部分死了都不知到多少回了,问我的系统为啥这么稳,我说我用的 jfinal

2018-01-07 17:08

异常来看是 jetty 版本不对,使用 jfinal 官方提供的 jetty 版本,否则的话也可以使用传统的 Jetty 启动方式来代替 jfinal 整合的启动方式

2018-01-07 17:06

使用下面的方法配置一下:
arp.getEngine().setSourceFactory(new ClassPathSourceFactory());

上面的配置可以去 classPath 以及 jar 包中去加载 sql 文件,而 StackOverFlowError 应该是你的 sql 模板文件有循环引用而造成的,例如 A include B,而 B include C,再 C include B ,这样造成了死循环

仔细看一下 jfinal 手册中有关最佳实践的描述

2018-01-06 20:12

@shan 是你当前正配置的这个 controller 的 viewPath,这个 viewPath 与前面配置的 baseViewPath 是不同的,最终的 path 为;
finalPath = baseViewPath + viewPath + view

baseViewPath 与 viewPath 在项目启动的时候会一次性拼接好,性能会尽可能地高

2018-01-06 19:31

期待开源

2018-01-06 19:30

感谢分享

2018-01-06 19:28

add("/aaa", Dbtest.class); 改成:add("/aaa", Dbtest.class, "/");

add 方法如果省略第三个参数,默认与第一个参数相同,所以:
add("/aaa", Dbtest.class); 与 add("/aaa", Dbtest.class, "/aaa"); 完全等价

2018-01-06 19:25

看下手册模板引擎有关《原样输出》 这一章节,像下面这样解决:
#[[
layUI 或者任意代码
]]#

2018-01-06 19:24

@jasun 现在用一下 @Before(NotAction.class) 拦截器也可以

2018-01-05 20:10

看一下 CacheInterceptor 中的代码,再扩展一下这个拦截器即可

2018-01-05 18:18

通过 arp.setShowSql(true) ,将 sql 输出到控制台,看一下有啥问题

2018-01-05 14:33

然后,使用不同的 layout,只需要调用不同的函数就可以了,例如前端界面调用:
#@frontLayout()

后端界面调用:
#@adminLayout()