__jfinal-club-changelog.txt 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. jfinal club 4.8 相对 4.2 的变化:
  2. 1:jfinal 升级到最新版本 4.8
  3. 2:jfinal undertow 升级到最新版本 2.0
  4. 3:文件上传组件 cos 升级到最新版本 2019.8
  5. 4:log4j 升级到 1.2.17
  6. 5:首页添加轮播广告组件
  7. 6:package.xml 中 fileSet 标签添加 lineEnding 子标签,解决不同平台下脚本复制换行的问题
  8. 7:分页向前、向后按钮改为大于小于字符
  9. 8:MyFeedbackService、MyProjectSevice、MyShareService 的 update() 方法添加
  10. remove("createAt"),避免 mass assignment 修改 createAt 值
  11. 9:fatjar 打包的 pom.xml 中的 shade 插件添加 filter,过滤掉 *.SF、*.DSA、*.RAS
  12. ------------------------------------------
  13. jfinal club 4.2 相对 4.1 的变化:
  14. 1:jfinal 升级到 4.2
  15. 2:根据用户对 jfinal.com UI 的反馈,改进 html、css、js 细节,提升用户体验
  16. 3:首页、分享、反馈、动态列表中的 h1 改为 div, 否则在浏览器渲染的时候,如果电脑当时很慢
  17. 会首先显示很大的 h1 字体,然后才变成小字体
  18. ------------------------------------------
  19. jfinal club 4.1 相对 4.0 的变化:
  20. 1:jfinal 升级到 4.1
  21. 2:大量调整 html、css、js 提升用户体验,例如:文档页面左侧菜单及脚本被大幅调整
  22. 3:所有 findByCache、findFirst、paginateByCache 由 getSqlPara 模式
  23. 改为 template(...) 模板模式
  24. 4:JsoupFilter 过滤 a 标签 href 中的 javascript 脚本,加强 XSS 防范
  25. 5:JsoupFilter 开启 html 5 的 video 标签,方便在文章中插入视频
  26. 6:Project、Share、Feedback 在 configEngine 中添加 me.addSharedObject(...),
  27. 便于在页面使用 field 表达式代替 static field 表达式,例如:
  28. Project.REPORT_BLOCK_NUM
  29. 可改成下面的形式,进一步节省代码量
  30. com.jfinal.club.common.model.Project::REPORT_BLOCK_NUM
  31. ---> 注意:Model 的 field 表达式读取字段的功能,最低 jfinal 4.0 版本才开始支持
  32. 7:后台 html 页面中 Project、Share、Feedback 的 static field 表达式改为 field 表达式
  33. ------------------------------------------
  34. jfinal club 4.0 相对 2.0 的变化:
  35. 1:升级到 jfinal 4.0,去除 cglib/asm 依赖
  36. 2:前台 UI 全部替换,改进文档频道用户体验
  37. 3:控制层与业务层的依赖全部改成 @Inject
  38. 4:Validator 中改用 setRet(..) 与 render(getRet()),使得 js 中的代码统一,减少大量代码
  39. 5:优化部分 sql
  40. 6:AdminAuthService、PorjectService、ShareService、FeedbackService 中使用 jfinal 4.0
  41. 新提供的 template(...) 方法,节省大量代码,例如:
  42. Db.template("admin.auth.isSuperAdmin", accountId).queryInt();
  43. ------------------------------------------
  44. jfinal club 2.0 相对 1.9 的变化:
  45. 1:jfinal 升级到 3.8
  46. 2:jfinal undertow 升级到 1.6
  47. 3:升级前端 UI (TODO)
  48. 4:configConstant(...) 添加配置 me.setInjectSuperClass(true),支持超类依赖注入
  49. 5:生成器添加配置 gen.setGenerateRemarks(true) 为 base model 生成备注
  50. 6:all_sqls.sql 改名为 _all_sqls.sql,修改 JFinalClubConfig 相应配置
  51. 7:start.sh、stop.sh、restart.sh 合并为 jfinal.sh,添加 stop.bat
  52. 8:JFinalClubConfig 中的
  53. PropKit.use(dev.txt).appendIfExists(pro.txt)
  54. 改为
  55. PropKit.useFirstFound(pro.txt, dev.txt);
  56. 也即由生产环境配置追加模式改为生产环境配置整体代替模式
  57. ------------------------------------------
  58. jfinal club 1.9 相对 1.8 的变化:
  59. 0:jfinal 升级到 3.6,避免客户端中途断开连接时抛出异常,日志文件会很干净。还包括很多其它改进与优化
  60. 1:jfinal undertow 升级到 1.5,解决 session 热加载问题
  61. 2:DocumentAdminService 、DocumentAdminController 的 findById 改成 findByIds
  62. 3:MessageController.friend() 添加 null 值判断并 renderError(404)
  63. 4:log4j.properties 日志文件存放添加 log 子目录,保持项目根路径干净清爽
  64. 5:JFinalClubConfig 中的 afterJFinalStart() 改名为 onStart()
  65. 6:stop.sh 三处 beforeJFinalStop() 改为 onStop()。添加 kill -9 有关注释
  66. 7:AccountService.getUsefulById(...) 添加 null 值判断
  67. 8:fastjson 升级到 1.2.55,支持 Page 反序列化(需要 jfinal-3.6 支持)
  68. 9:_Generator 中添加 setGenerateRemarks(false) 配置
  69. 10:添加配置:undertow.resourcePath=src/main/webapp, classpath:webapp
  70. 11:fatjar 打包配置文档修改主两处错误
  71. ------------------------------------------
  72. jfinal club 1.8 相对 1.7 的变化:
  73. 0:jfinal-undertow 升级到 1.3
  74. 1:pom.xml 中添加 maven-jar-plugin 插件,避免 src/main/resources 下的配置文件打入 jar 包
  75. 好让 config 目录下配置文件生效,否则 config 中与 jar 包内的同名配置文件将不会生效
  76. 2:package.xml 中过滤掉对 web.xml、WEB-INF 的复制,jfinal-undertow 不需要 web.xml
  77. 3:更新 undertow-config-demo.txt,添加 jfinal-undertow-1.3 新增功能配置
  78. 4:添加 restart.sh 重启脚本
  79. 5:改进 ImageKit,解决 png 转 jpg 背景颜色改变的问题,感谢 @步步(讯) 的贡献
  80. 6:jfinal-club-1.8.sql 中的 role、permission、account_role、role_permission
  81. 表的 charset 由 utf8mb4 改成 utf8,解决老版本 mysql 无法导入问题
  82. ------------------------------------------
  83. jfinal club 1.7 相对 1.6 的变化:
  84. 0:添加 "doc/___极速打包部署.txt" 说明文件
  85. 1:pom.xml 中删除 jetty-server 依赖
  86. 2:pom.xml 中添加 jfinal-undertow 依赖,从 jetty 切换到 undertow
  87. 3:pom.xml 中添加 maven-assembly-plugin 打包插件,根目录下面添加 package.xml 打包配置
  88. 4:根目录下面添加 start.sh、stop.sh、start.bat 启动脚本
  89. 5:JFinalClubConfig 中 JFinal.start(...) 改为 UndertowServer.start(...)
  90. 6:配置 文件 jfinal_club_config_dev.txt 的下划线改为减号
  91. 7:添加 undertow.txt 配置文件
  92. 8:修改 jfinal-club启动必读.txt,去除与 jetty 有关的一切内容
  93. 总述:jfinal-club 1.7 项目自身未做任何改动,所有变化围绕从 jetty-server 切换到
  94. jfinal-undertow
  95. jfinal-undertow 不仅启动极为迅速,热加载响应十分快捷,更重要是开发、打包、部署、运行
  96. 完全不用对项目或者配置有任何改动,从而实现从开发到部署的极致快捷
  97. ------------------------------------------
  98. jfinal club 1.6 相对 1.5 版本的主要变化:
  99. 1:jfinal 升级到 3.5,pom.xml 中的 JDK 编译级别升为 1.8
  100. 2:jetty-server 升级到 jetty-server-2018.11,该版本的 JDK 最低要求为 1.8
  101. 3:JFinalClubConfig 中配置 me.setInjectDependency(true) 启用最新的 Aop
  102. 模块功能,免去业务层 AOP 必须手动 enhance 的步骤,免去业务层维护单例的样板式
  103. 代码,例如:
  104. public static AccountService me = new AccountService();
  105. 注意:为了节省改动时间,现只先修改了后台管理模块的 AOP 使用方式。
  106. 此外,对于工具类的业务使用原有的 public static Xxx me 模式
  107. 比 @Inject 更加方便,同理,对于全局多处依赖的业务也如此,
  108. 例如:AccountService
  109. 4:添加文档管理模块,方便同学们使用 jfinal club 二次开发属于自己的带文档的社区
  110. 5:添加 @Remark 注解用于一键同步时向 permission 表的 remark 字段添加内容(该字段有内容时跳过)
  111. 详细用法请见 DocumentAdminController.java
  112. 6:账户管理添加 "查看后台账户/管理员" 功能,便于查看后台都有哪些账户被分配了角色,在对账户误操作分配了角色时,
  113. 也便于取消角色分配
  114. 7:模板文件 "/_view/admin/common/_menu.html" 之中添加了 #permission 指令 "细粒度"
  115. 控制菜单的示例,以及 #role 指令 "细粒度" 控制菜单的示例。缘于很多同学在问如何 "细粒度"
  116. 控制菜单权限的问题,jfinal club 细粒度控制菜单不需要添加后台代码,只需要事先在需要控制
  117. 的菜单那里用 #permission 与 #role 指令事先埋好点即可,权限控制的行为与后端完全一致,
  118. 前后端权限使用同一套逻辑,避免发生前后权限逻辑的死角、遗漏、不一致性
  119. 8:pom.xml 中添加 jetty-maven-plugin 插件,方便习惯于使用该插件的人启动并开发项目,启动项目只需
  120. 在控制台输入: mvn jetty:run
  121. 这种启动开发项目的方式也支持热加载,使用该启动方式可以去掉对 jetty-server 项目的依赖。
  122. 相对于 jfinal 官方提供的启动方式控制台输出信息较多较杂,启动速度慢,绝大多数情况建议
  123. 使用 jfinal 官方的启动方式
  124. 9:pom.xml 中添加 slf4j-nop 依赖避免在开发阶段启动项目时输出的 INFO 干扰信息,控制台从此特别干净清爽
  125. 10:reply.html 页面的 title、content 的输出使用 #escape() 指令,避免出现页面格式混乱
  126. 11:左侧首页菜单图标改为 fa-home,美观且符合度更高
  127. 12:BaseController 中添加 _clear_()
  128. 13:BaseController 中的 @Before(NotAction.class) 改用 @NotAction
  129. 14:启动方法统一使用 JFinal.start("src/main/webapp", 80, "/", 5),jfinal 3.5 已支持 IDEA
  130. 15:删掉 MyClassPathSourceFactory、MyClassPathSource,jfinal 3.5 已改进过 ClassPathSource
  131. 16:删除 com.jfinal.club.common.aop 包,改为使用最新版本 jfinal 3.5 的 aop
  132. 17:jdbcUrl 配置中添加 useSSL=false,避免使用高版本 mysql 时,控制台输出干扰开发的无用 INFO 信息
  133. 18:删除 JFinalClubConfig 中用于 IDEA 的启动代码以及相关所有注释说明,jfinal 3.5 已支持 IDEA 以及
  134. 所有 eclipse 版本
  135. 19:pom.xml 中的 maven-compiler-plugin 插件参数添加 -parameters 配置,便于二次开发中使用 action 带参
  136. eclipse 相关编译配置见文档:http://www.jfinal.com/doc/3-3
  137. ---------------------------------------------------
  138. jfinal club 1.5 相对 1.4 版本的主要变化:
  139. 1:项目管理、分享管理、反馈管理添加创建功能
  140. 2:分享管理、反馈管理模块添加回复管理功能
  141. 3:账户管理添加更换头像功能
  142. 4:权限管理的权限列表识别不存在的 action,并给出操作提示
  143. 5:授权管理添加 AdminAuthKit,支持 #if(hasPermission(...) ... #else ... #end 以及
  144. #if(hasRole(...) ... #else ... #end
  145. 6:改进 ImageKit,移除对于 com.sun 包下的图片处理 API 依赖,更好支持 jdk 7/8
  146. 7:将 Switchery 组件换成 magic input 组件
  147. a:在 __admin_layout.html 中引入 magic input 的 css 文件,删除 Switchery 的 css 与 js 引用
  148. b:升级 jfinal-admin.js 中相关的 init 方法
  149. c:将 checkbox 组件的 class="js-switch" 样式改为 class="mgc-switch mgc-tiny"
  150. 并将 initSwitchery() 方法名改为 initMagicInput(),并去掉第二个参数
  151. 8:修改页面提交以后返回到当前记录所在的页,老版本总是返回到第一页
  152. 9:RoleDirective.hasRole(...) PermissionDirective.hasPermission(...) 重构至 AdminAuthService
  153. 10:RoleDirective、PermissionDirective 中获取 loginAccount 的方式改为从 scope 中获取
  154. 11:重构 PermissionDirective、RoleDirective,代码更简洁
  155. 12:删掉 admin_role.sql 与 admin_permission.sql ,其中的 sql 转至 admin_auth.sql
  156. 13:删掉 all_sqls.sql 中对 admin_role.sql 与 admin_permission.sql 的 #include 包含
  157. 14:角色管理的 add、edit、_form 三个页面合并为 add_edit.html
  158. 15:UploadController 中的 renderJson(ret) 改为 render(new JsonRender(ret).forIE())
  159. 防止 ueditor 图片上传功能在 IE 下出现文件下载现象
  160. 16:$.pjax.defaults.timeout = 1500; 改为 5000
  161. 17:后台管理菜单颜色的 #ffffffb3 改为 hsla(0,0%,100%,.7),支持老版本 IE
  162. 18:其它打磨
  163. 升级建议:由于 jfinal club 1.5 打磨的地方比较多、比较细、也很重要,升级建议以 jfinal club 1.5 为基础,
  164. 将已经基于 jfinal club 1.4 做的项目中的自己写的代码重新整合到 jfinal club 1.5 中去。
  165. 二次开发产生的 js、css 代码要写到新建的文件中去,然后在 layout 中引用,这样有利于将来升级
  166. 此外,permission 表中的内容有所增加,升级完以后需要进入权限管理进行"一键同步",最后按个人需求
  167. 为角色分配相应的权限即可
  168. ---------------------------------------------------
  169. jfinal club 1.4 相对 1.3 版本的变化:
  170. 1:升级到 jfinal 3.4
  171. 2:后台管理功能全部重写,添加内容管理、账户管理、角色管理、权限管理等功能
  172. 3:后台管理界面全部重写,手写骨架,右下角内容区域使用 bootstrap 3,方便进行二次开发
  173. 二次开发基本只需要照猫画虎,添加右下角内容区域代码
  174. 4:添加 #role #permission 指令,用于在界面控制权限
  175. 5:其它一些细节变化将在直播中讲解,会有更深刻的了解
  176. 注意:后台管理功能看似简单,其实里头很多细节,采用极简设计,尽可能消除学习成本和二次开发成本
  177. 后台管理源代码与功能将会在直播中详细讲解
  178. ---------------------------------------------------
  179. jfinal club 1.3 相对 1.2 版本的变化:
  180. 1:升级到 jfinal 3.3
  181. 2:JFinalClubConfig 中加载配置文件由 try catch 改为使用 PropKit.appendIfExists(...)
  182. 3:ShareController、FeedbackController、MessageController、NewsFeedController
  183. 中的 renderToString(...) 的模板去掉路径
  184. 4:sql 管理功能使用 ClassPathSourceFactory 来做,从类路径里头加载
  185. 5:mysql 驱动升级到 5.1.44 版本
  186. 注意:jf club 1.2 已经处理过 Ret 类的升级,从 1.2 升级到 1.3 只需要关注上述五条
  187. doc 目录下面的三个 png 图片文件,仅用于指导更老的版本升级到 1.2 或 1.3
  188. ---------------------------------------------------
  189. jfinal club 1.2 相对 1.1 版本的变化:
  190. 1:jfinal 升级到 3.2 版本
  191. 2:文件上传组件 cos 升级到 2017.5 版本
  192. 3:UploadController 捕获 ExceededSizeException 异常,更好处理上传文件长度超出范围
  193. 4:"/upload" 路由改为 "/common/upload",修改 ueditor 相关配置指向新路由。此改进主要为了 nginx 配置方便
  194. 避免与 "webapp/upload" 的配置产生影响,减少 nginx 配置量
  195. 5:查找替换 html 文件中的 22 处 ret.isOk 为 ret.state == "ok"
  196. 6:查找替换 html 文件中的 4 处 ret.isFail 为 ret.state == "fail"
  197. 7:查找替换 js 文件中的 11 处 ret.isOk 为 ret.state == "ok"
  198. 建议大家升级自己项目 Ret 的方式为:
  199. 1:利用查找替换功能将 html 与 js 中的 ret.isOk 替换为 ret.state == "ok"
  200. 2:利用查找替换功能将 html 与 js 中的 ret.isFail 替换为 ret.state == "fail"
  201. 如果项目未涉及到 Ret 生成的 json 数据则不需要处理,java 代码中的
  202. ret.isOk() ret.isFail() 行为并无变化,不需要处理
  203. 如果觉得上述升级方式比较麻烦,可以在项目启动时调用一次 Ret.setToOldWorkMode()
  204. 可以继续沿用老版本的工作模式,这种升级方式比较适合不需要怎么改动的老项目