2019-06-20 23:49

jfinal 4.2 主要是增强了业务层 AOP,如果这块代码与业务层 AOP 有关,可以试着单步调试对比来找到原因

我不知道具体原因,因为这块的变化并不涉及异常,老版本的业务层 AOP 用到了 cglib ,或许是 cglib 内部的处理方式与 jfinal 4.2 的有所不同

或许是你自己的代码有所变动引起的

2019-06-20 23:43

@孤傲苍狼 你这个貌似是在使用 servlet 3 自带的文件上传,那么就要添加相应的 Serlet 支持

这个过程与 jfinal 就没有关系了,也就是说不再使用 jfinal 的 getFile() 完成上传

因此,将目光转向如何使用 servlet 3 的 API 来实现文件上传即可。

具体到 jfinal undertow,配置 servlet 的方法在文档中有:
https://www.jfinal.com/doc/1-4

注意在添加 servlet 的时候为其添加 multipartConfig 来支持文件上传

2019-06-20 18:23

@mrbai2018 俱乐部会员该享有的价值

2019-06-20 17:44

@mrbai2018 你在本地能用,扔到线上不能用,这个相对来说比较好解决, 重点关注线上环境与你本地环境有啥区别,用好排除法,例如 tomcat 的版本号之类的

还要注意部署方式,在本地能用,可能是你在 eclipse 中使用 tomcat 能用, 如果你在本地使用与远程一样的部署方式不一定就能用

2019-06-20 17:42

例如,将这个 ModelRecordElResolver.init(servletContext) 放在某个类的 static 块之中,只要是在使用之前加载就可以

spring 有工具类在任何地方获取 ServletContext,所以这个初始化动作放在任何地方都方便

2019-06-20 17:41

@mrbai2018 如果是 "非嵌入式" tomcat 用法,默认就自带 servlet 这些东东,按理说是可以直接支持的,你先注意掉 ModelRecordElResolver.init(servletContext) 这行代码跑一跑看看

确保能跑起来,再回过头来解决这个问题,或许改变一下这行代码的加载地点就可以了

2019-06-20 17:40

@mrbai2018 如果用的 undertow 就要注意了,因为 undertow 默认不支持 JSP,这个是 jfinal 无法干预的事情

2019-06-20 17:39

@mrbai2018 开发环境是什么? 是 tomcat 还是 jetty

2019-06-20 16:58

这个可能是你打包的时候没有去掉 jetty-server 依赖造成的

JspFactory 这些东东是 servlet 规范里头的,jetty 与 tomcat 都有自己的实现,如果不去掉会有冲突

在文档中有过说明,部署到 tomcat 之前,一定要删干净 jetty 或者 undertow 的依赖:
https://www.jfinal.com/doc/1-7

2019-06-20 16:27

@sandy777 实在找不到的话,就用 maven 吧, gradle 在使用上主要就是省点配置,与 maven 并无本质区别

2019-06-20 16:26

在 JFWebConfig 中添加一个 onStart() 方法, jfinal 在启动时会回调该方法,然后使用下面类似的配置方式,将你的扩展应用上:
FreeMarkerRender.getConfiguration().setSharedVariable(...);

这里的关键就是要在 onStart() 方法中去添加你的配置

2019-06-20 15:56

建议将 sql 模板放在 src/main/resources 下面,这样在打包的时候会将 sql 文件打入 jar 包之中,比让它处于 webapp 下面要更好

2019-06-20 15:56

这里的关键就是用于 sql 模板管理的 Engine 对象已经默认配置了下面的配置:
arp.getEngine().setToClassPathSourceFactory();

也就是说 engine 会去 class path 和 jar 包中找模板文件

当然,如果你仍然希望去 webapp 目录下面去找模板,再追加一个配置即可:
arp.getEngine().setSourceFactory(new FileSourceFactory());

然后就可以这么来用了:
arp.addSqlTemplate("/WEB-INF/sql/all.sql");

2019-06-20 15:53

1:将 sql 模板挪到 src/main/resources/sql 目录下面去

2:删除下面这行:
arp.setBaseSqlTemplatePath(PathKit.getWebRootPath()+"/WEB-INF/sql");

3: arp.addSqlTemplate("/sql/all.sql");

2019-06-20 15:51

gradle 是晚于 maven 出来的,maven 已有的功能在 gradle 中应该都可以找到替代方案,找找他的官方网站