2022-08-03 09:56

传统如Tomcat项目,修改项目文件,比如Java的时候有个方法参数类型变更后,其他调用类不更改,但是编译时class是变了。只上传修改的那个Java对应class就会线上报错本地好使的问题。
jfinal-undertow部署maven项目,一般项目打包的业务jar里面只要class即可,这样jar压缩后就没多大才对,而且只替换一个文件,反而方便安全了。
如果打包后的jar比较大,建议用解压工具打开jar,看看是不是把配置文件或者资源文件打包到里面去了。如果确实打入了,可以在xml中配置排除。
我记得还可以配置一个文件夹,把项目文件class扔进去,也可以被加载进去,具体没试验,不喜欢用

2022-07-29 18:24

期待已久~ 上手上手!

2022-07-06 12:04

猜不到,可能需要补充更多项目信息

2022-07-06 12:02

文档 https://jfinal.com/doc/1-7
第5条 部署,那篇博文说的就是这个误部署

2022-07-01 18:09

我寻思数据源应该是 DruidPlugin 之类的吧?
这些工具对getConnection()获取做了拦截,上面加了计时器。
Druid有获取连接池的一些信息的方法,具体可以网上搜索一下,比如拦截器的现存数量之类的方法。

如果要自己扩展 ActiveRecord 的话,可以通过
public ActiveRecordPlugin(Config config) 这个构造器,自建Config,拦截里面的getConnection()方法,做一个记录器之类的标记,也可以实现

2022-07-01 15:15

@azzcsimp 明白你的意思了,项目如果是Tomcat运行,是class运行,上面写是没有问题,优先加载的 WEB-INF/classes文件。 如果是jfinal-undertow运行的话,最后项目class也会被打为jar,加载的时候就会报错。 推荐自建一个 BaseController 里面覆写 getFiles 系列方法,new 自建的类就可以了,文件上传前面就不再拦截了

2022-06-30 14:53

@azzcsimp multipart/form-data HTTP格式里面请求数据是用分隔符分隔的,又不是JSON格式的,所以你那个EpRequestWrapper里面需要支持application/json的同时也要支持multipart/form-data 格式

2022-06-30 14:32

第一层 使用 MultipartRequest 做文件格式协议解析,然后再 EpRequestWrapper 做第二次参数值解密就可以了,两个Handler各做各的事情,有什么影响吗?
EpRequestWrapper 里面拿不到值了?
加密一般只加密 值,不加密键啊,所以获取到的值应该只是密文,解密后放入 EpRequestWrapper 里面自建的map对象,后面Request的get系列都走的是map的get就可以了,不知道你那怎么写的了

2022-06-29 18:38

试试这样写
String contentType = request.getContentType();
if( contentType != null && contentType.toLowerCase().contains("multipart/form-data")){
if (request instanceof MultipartRequest == false)
request = new MultipartRequest(request);
List files = ((MultipartRequest)request).getFiles();
}
next.handle(target, request, response, isHandled);

2022-06-29 18:14

@zzutligang .save() 生成SQL的时候会自动过滤,不会放入数据库。
Model对象有没有多余字段无所谓,临时对象。
如果想知道哪些是保留字段,可以调用 CPI.getModifyFlag( myModel ) 获取到

2022-06-29 09:49

@jfinal爱好者22 new MyModel()._setOrPut( map ).save()

2022-06-28 17:15

需要使用高版本JF的 Model

或者自己扩展一个RecordKit 工具类,提前存储好对应表字段,然后实现一个剔除功能即可

2022-06-21 14:44

@zeroabc 这个有啥放的,在handle里面 next.handle 之前放serTL(),之后removerTL()就可以了,ActionHandler里面 render 执行时就可以拿到值了。Invocation不行,因为它在render之前invoke运行完毕了。所以你上面代码换成handle最合适了
https://jfinal.com/doc/2-7

2022-06-21 12:57

@zeroabc 我用的Handler处理TL,存放租户唯一标识

2022-06-15 14:41

@azzcsimp 使用 extends Handler 进行替换 HttpServletRequest
request = new EpRequestWrapper(request);
next.handle(target, request, response, isHandled);
https://jfinal.com/doc/2-7
因为 args参数值 比拦截器intercept 先执行,ParaProcessor 使用的还是未解密的request对象。
this.args = action.getParameterGetter().get(action, controller);
所以使用Handler即可。