2020-12-11 10:52

@NignSah 这个版本没问题的,天天都在用的

2020-12-10 20:38

jfinal undertow 用的哪一个版本?

此外,请求是不是包含了文件上传,也就是说是不是包含了 type="file" 这个 input 域

2020-12-10 15:48

@hen 我一般是直接用的 Model, 而不用 VO, getter setter 方法已经用生成器生成过了, VO 没有必要了

2020-12-10 15:13

@陈贤一 导入 demo 要注意,一定要当成 maven 项目导入,也就是要走 IDEA 的 maven 项目导入 "向导"

导入后除了修改数据库用户名密码以外,别的啥都不用改

这个 demo 马上快 10 年了,如果有问题,早在 9 年多以前就会被发现并解决,不会有问题的,放心

2020-12-10 12:53

jfinal 项目是标准的 maven 项目,这个肯定是没什么可以说的了

只要你按标准的 maven 项目导入就可以了,出现这样的问题多数是配置不当引起的

2020-12-10 12:14

demo 中的 package.xml 有如下配置:
<formats>
<format>dir</format>
<format>zip</format>
</formats>

2020-12-10 11:45

在 package.xml 中的最上部分,已经有注释明确说明了,如何打包 zip、jar、dir、gz 等等格式

而且可以同时打包多种格式,不要乱改 package.xml 文件

2020-12-09 22:58

你谈到了 mybatis 对持久化层相对定义得更明确这个问题,在 10 年前我设计 active record 的时候也跟你有一样的考虑,但其实完全是多虑了:
1:数据库层面已经对字段的长度、类型、是否可以为 null 等等做过限定了,ORM 这一层如果再做一次其实没多少必要,最终落实的时候无非也是抛个异常或给个提示到应用层

2:对于 sql 查询来说,更加没有必要有所谓的定义明确的问题,因为 JDBC 已经对数据库字段转成什么样的 java 类型做过这个工作,绝大多数情况没有必要干预。为了提升用户体验可以适当干预几个类型,例如 Model.getStr、getInt 等等几个方法提供了自动类型转换

2020-12-09 22:53

basemodel 中的 getter、setter 本身就是不用写的,是生成器自动管理的,所以也就没有使用 lombok 的必要

jfinal 的 Model 其实是结合了传统 bean 与 map 的优点,bean 体现在 getter、setter 方法,好处不用多说, map 的优点是可以自由承载数据

model 中的 map 自由承载数据主要体现在两个方面:
1:sql 关联查询可以将其它 table 中的字段关联进来
2:可以通过 model.put(...) 放入任意数据便于在 view 层展示
以上两个特性是传统 bean 无论如何也无法实现的

至于 model 转 VO, 稍微用用反射就可以做到了,主要流程如下:
1:获取 VO 的所有 setter 方法
2:对 setter 方法进行循环,得到属性名,从 model 中取出数据,再放入 VO
model.get(属性名) 可很容易获取数据
3:将反射结果存到缓存,提升性能

2020-12-09 18:02

因为你的 href 后面的资源路径没有以 "/" 打头,所以资源路径会随着你当前目录到处乱飞

改成 "/assets/..... 即可

2020-12-09 15:53

@山东小木 这个分享主要是针对昨天新加的 Model.each API,关注这个就行

2020-12-09 14:32

@山东小木 这个问题好像跟去掉 order by 无关

2020-12-09 11:38

JsonKit 只是转调一下你通过 me.setJsonFactory(...) 配置好的转换工具

2020-12-09 11:37

配置 JFinalJsonFactory 时,使用的是 JFinalJson 来将对象转 json string。
而 JFinalJson 转 json 不会使用 getter 方法,所以你新增的 getter 是无用的。

配置 FastJsonFactory 时,使用的是 FastJson 来将对象转 json string。
而 FastJson 是使用的 getter 方法拿到数据并转换的。

文档中很详细说明过这个问题

2020-12-08 13:20

昨晚刚推送 jfinal 4.9.05,今天扩展就出来了,超赞

有几处改进建议,#if( isGetCount??false ) 这个与 #if( isGetCount ) 其实是等价的,因为 #if ( null ) 等价于 #if ( false )

同理 #if( !(isGetCount??false) ) 也可以改成 #if( !isGetCount )