2018-12-26 16:41

@yuer_2018 这个设计方式是为了极致性能,否则可以采用 jfinal 整合的 jetty-server 的那个方案

jetty-server 的方案比较费内存,而且响应速度不如这个方案快, 这个方案配置好以后就不需要动了,部署时也不需要改配置,因为部署时会完全忽略这个配置

2018-12-26 16:30

添国一个配置:
undertow.hotSwapClassPrefix=com.eshanren.

如果还出现这类问题,继续添加配置,多个配置用逗号分隔,文档中有过说明:
https://www.jfinal.com/doc/1-5

注意看文档的第四小节

2018-12-26 16:28

@静态代码块 单步调试一下, 父类的注入要用 Aop.get(...),不能用 @Inject

2018-12-26 16:24

@fox club 中有,照抄就好

2018-12-26 16:23

@yuer_2018 src/main/resources 这里面所有文件会被编译到 classes 下面去

我看到你的项目中有一个 out 目录,这个不是标准的 maven 项目结构,甚至不是标准的 web 项目结构, 好在 jfinal 也支持这类 out/bin 目录

你只要使用我前面的配置就好:
activeRecordPlugin.getEngine().setToClassPathSourceFactory();
activeRecordPlugin.getEngine().setBaseTemplatePath(null);
activeRecordPlugin.addSqlTemplate("sqls/all.sql");

2018-12-26 16:21

@himans 建议去掉那个 handler ,会更简洁些

2018-12-26 16:20

@静态代码块 jfinal 中的全局拦截分为 controller 层的全局拦截, 以及 controller 层之外的全局拦截,这个 controller 之外的我称之为业务层,并不太贴切

区分一下:
me. addGlobalServiceInterceptor(...)
me.addGlobalActionInterceptor(...) 就好

2018-12-26 16:01

看一下 File not found 这个提示信息中的目录下面,是不是真的有 all.sql 这个文件

你的配置需要改成下面的:
activeRecordPlugin.getEngine().setToClassPathSourceFactory();
activeRecordPlugin.setBaseTemplatePath(null);
activeRecordPlugin.addSqlTemplate("sqls/all.sql");

2018-12-26 15:58

在jfinal 模板里面使用 for 循环跟 java 代码几乎没差别:
#for ( x : list)

#for ( i = 0; i < 10 ; i++)

2018-12-26 15:53

@静态代码块 me.addGlobalServiceInterceptor(...) 这个只针对业务层拦截器,控制层用的是 me.add(...)

2018-12-26 15:52

@fox 这里的本质是通过某种手段记下用户的动作,然后在做日志时根据前面手段中的记录来具体操作

2018-12-26 15:51

@roelay 这个只在开发时需要, 生产环境根本不会用到这个配置,放心使用

2018-12-26 15:49

@亢龙无悔 在本地搭好环境, 单步调是终极办法,这种问题容不得半点猜测

2018-12-26 14:56

看上去是浏览器地址栏直接请求了模板文件, 模板被渲染必须要先走 controller , 然后在 render 中被渲染出来