2018-09-02 23:11

@埃克斯 这个项目好像不维护了,建议使用 swagger

使用 jfinal 的 action 带参用法,用 swagger 可直接生成文档,不必引入额外的注解

如果一定要使用 jdoc,得单步调试一下程序去哪里去找那个 jdoc_template.ftl 文件了,如果 jar 中没有,那么是要去哪里找,看看这个项目的文档怎么说的

2018-09-02 17:10

@Yank 异常信息与 dao.find 是没有关联的, 专心解决好 shiro 的问题就好

2018-09-02 12:01

#ifDefFunc 这个需求第一次被提出,确实比较实用,感谢博主的分享

2018-09-02 11:01

@天朝子民 俱乐部的 @山东小木 使用 JSP 六年多,尝试使用 enjoy 以后,坚决扔掉 JSP 了

从开发体验学习成本来说 enjoy 强大方便太多了

2018-09-02 10:59

@fansunion jfinal 生态在国产 web + orm 框架中已经是最好的了,往后的世界不可能只有 spring 一家,jfinal 的定位与 spring 在很多方面几乎是相反的

jfinal 追求简而精,追求让用户代码量最小、学习成本最低、开发效率最高。jfinal 自身的代码量很小,解决问题时比 spirng 要容易多了,基本就是单步调试往下跟两层就知道原因了,而 spring 之下你跟踪七八层还找不着北呢

2018-09-02 10:54

@nbjgl 这样每次 new 出来一个 factory 太浪费了,可以用一个 static 变量持有这个 factory , 全局共享,只 new 出来一次

2018-09-01 20:29

MixedJsonFactory 结合了 JFinalJson 支持 sql 关联查询的结果的 json 转化与 FastJson 的反向转 Model/Bean,一般用这个是最方便的

感谢分享

2018-09-01 20:27

@fansunion 数据库字段类型是 varchar 的时候,你可以重新运行一下 jfinal 生成器,那么相应的 getter setter 方法中的类型会跟着改变

此外,建议所有字段使用驼峰命名,这样就可以让 JFinalJson、FastJson 转 json string 时的格式统一了,无论是通过 getter 方法还是 Model.attrs 的 Map 转都一样的结果

2018-09-01 20:24

@nbjgl 那个太老了,你可以先参考 beetl 官网的方法整合 beetl,然后通过 renderTemplate(...) 来使用 enjoy 引擎

2018-09-01 19:30

引入一个 BaseController ,在其中做一个 renderBeetl(...) 方法,然后所有 Controller 继承这个即可

2018-09-01 18:47

再补充一个知识点:
配置 MixedJsonFactory、FastJsonFactory 等等 factory 以后,并不意思着不能使用其它类型的 json 转换工具了,还可以临时这么来用:
JFinalJson.getJson().toJson(...);
FastJson.getJson().toJson(...);

也就是说 factory 是配置默认,当不想使用默认时可以这样:
String json = JFinalJson.getJson().toJson(...);
renderJson(json);

2018-09-01 18:45

补充一个有用的点: JFinalJson 转 json 时不依赖于 getter 方法,而是将 Model.attrs 这个 Map 中的值转成 json,所以这就支持了你 sql 关联查询时查出来的字段

这类关联查出来的字段在 Model/Bean 中是没有 getter 方法的,相当于动态化了

例如,你在 Article 这个 model 中没有定义 getUserName() 这个方法,但可以这样查询:
select a.*, u.userName from article a inner join user u on a.userId = u.id

上面是一个关联查询,在转 json 时会将 u.userName 这个关联过来的属性转换成 json,而这个功能在一般的 json 转换工具中是不可能实现的

2018-09-01 18:41

我很怀疑你的数据库字段本来就是 varchar,而你却误以为是 date/datetime

2018-09-01 18:41

MixedJsonFactory 转 json string 时用的 JFinalJson,反过来转成 Model/Bean 时用的 FastJson,所以你在使用它时,仍然要用 put(...),否则直接使用 FastJsonFactory 即可,这个在文档中有过明确的说明:
http://www.jfinal.com/doc/12-3

String 到 Date 的类型转换错误还是没有找到源头,getCreateTime(...) 这个地方仅仅是异常抛出的地方,根本不是数据的源头

2018-09-01 17:36

Brand 光定义两个属性不够的,需要有相应的 getter 方法配套,因为 fastjson 是通过你的 getter 方法进行 json 转换的

如果用 jfinal 自己的 json 转换工具,则需要 put("company", company) 这样将数据 put 进去才能转换,总的来说没有必要定义属性

此外, createTime 转换错误,你看这个 String 数据是多哪里来的? 是不是自己放进去的? 还是说从数据库来的时候就是 String ?

一般来说 date 数据从数据库出来仍然是 Date 类型,而不会无故成为 String 类型,这个通过单步调试很容易知道类型为啥不对