升级到4.9.01
编辑教程升级到4.9.01
jfinal 3.0 之前版本的升级
jfinal 3.0 是大版本升级,此前版本升到 jfinal 3.0 请移步 14.2、14.3、14.4、14.5 小节,这几个小节中的内容极少,升级很方便。
jfinal 3.0 之后版本的升级
升级到 3.1
无需修改,平滑升级
升级到 3.2
IStringSource 更名为 ISource
按照 14.2 小节 升级 Ret
升级到 3.3
指令扩展中的 java.io.Writer 改为 com.jfinal.template.io.Writer,eclipse/IDEA 开发工具会主动给出提示
升级到 3.4
由于 Json 中的 defaultDatePattern 初始值由 null 改为 "yyyy-MM-dd HH:mm:ss",JFinalJson 中删掉 datePattern 属性,所以要在 configConstant(Constants me) 中配置:me.setJsonDatePattern(null) 或者具体值
升级到 3.5
ISource.getKey() 更名为 ISource.getCacheKey()
升级到 3.6
Db、Model 针对多主键(联合主键)的 findById、deleteById 方法添加一个 's' 后缀,改成 findByIds、deleteByIds
用到 jfinal weixin 项目的 MsgController 时,需要在 configRoutes 中配置 me.setMappingSuperClass(true)
由于 jfinal 3.6 用于 sql 管理的 Engine 对象,默认配置了 engine.setToClassPathSourceFactory(),engine 将从 class path 和 jar 包中加载 sql 文件,所以如果 sql 文件以往是存放在 src/main/webapp 的需要转移至 src/main/resources 之下。如果以往配置过 arp.setBaseSqlTemplatePath(...),需要删除该行代码,或改为适应于 ClassPathSourceFactory 的配置,参考:https://www.jfinal.com/doc/6-2
升级到 3.8
用到 Aop 配置方法的改为使用 AopManager,例如:Aop.addMapping(...) 改为 AopManager.me().addMapping(...)
升级到 4.0
无需修改,平滑升级
升级到 4.1
无需修改,平滑升级
升级到 4.2
无需修改,平滑升级
升级到 4.3
无需修改,平滑升级
升级到 4.4
无需修改,平滑升级
升级到 4.5
默认不支持直接访问 .jsp 文件,如果需要直接访问 .jsp 文件,需添加配置:me.setDenyAccessJsp(false);
升级到 4.6
无需修改,平滑升级
升级到 4.7
无需修改,平滑升级
升级到 4.8
jfinal 4.8 之前的 Controller.getPara(String) 方法,在有表单域存在的时候就不可能返回 null 值,而是返回了 "" 值。jfinal 4.8 版本将之修改为与其它 getXxx 系方法一样,将 "" 处理为 null 值。
需要快速升级老项目的同学,可以引入 BaseController 并使用老版本的实现:
public class BaseController extends Controller {
public String getPara(String name) {
return getRequest().getParameter(name);
}
}
这个方法的具体改变细节见 gitee.com : https://gitee.com/jfinal/jfinal/commit/edfcc0015837ab0b1e6a1f980843ab88815ec1cd
升级到 4.9
jfinal 4.9 对 JFinalJson.java 进行了重构,如果以前的项目通过继承 JFinalJson 类做过扩展,需要注意扩展接口有所变动,具体可以参考一下源码中有关扩展的注释,新的扩展接口使用起来比以前要方便得多。
如无上述情况可平滑升级。
升级到 4.9.01
无需修改,平滑升级
Ret
如果待升级项目中未使用过 Ret,那么可以忽略本小节。如果是 jfinal 3.2、3.3、3.4 或者更高版本的 jfinal 也可以忽略。
JFinal 3.2 对Ret工具类进行了改进,使其更加适用于json数据格式交互的API类型项目。新版本状态名只有一个:state,取值为:ok/fail,而老版本状态名有两个:isOk与isFail,取值为:true/false。
所以,新旧版本Ret对象生成的json数据会有差异,对于大多数web项目来说,升级方法如下:
- 利用查找替换功能将 html 与js文件中的 ret.isOk 替换为 ret.state == "ok"
- 利用查找替换功能将 html 与js文件中的 ret.isFail 替换为 ret.state == "fail"
如果希望尽可能小的改动代码进行升级,可以调用一次Ret.setToOldWorkMode()方法沿用老版本模式即可。
configEngine
JFinal 3.0新增了模板引擎模块,继承JFinalConfig的实现类中需要添加public void configEngine(Engine me)方法,以便对模板引擎进行配置。以下是示例代码:
public void configEngine(Engine me) {
me.setDevMode(true);
me.addSharedFunction("/view/common/layout.html");
me.addSharedFunction("/view/common/paginate.html");
}
项目升级如果不使用Template Engine该方法可以留空。
JFinal 3.0 默认ViewType 为 ViewType.JFINAL_TEMPLATE,如果老项目使用的是Freemarker模板,并且不希望改变模板类型,需要在 configConstant 方法中通过me.setViewType(ViewType.FREE_MARKER)进行指定,以前已经指定过 ViewType的则不必理会。
baseViewPath
baseViewPath 设置由原来的configConstant(…) 方法中转移到了Routes 对象中,并且可以对不同的Routes对象分别设置,如下是示例:
public class FrontRoutes extends Routes {
public void config() {
setBaseViewPath("/_view");
add("/", IndexController.class, "/index");
add("/project", ProjectController.class);
}
}
从configConstant(…)转移到configRoute(…)中的好处是可以分别对不同的Routes进行设置,不同模块的baseViewPath很可能不相同,从而可以减少冗余代码。上面的代码示例是用于Routes拆分后的情况,如果你的应用并没有对Routes进行拆分,只需要在configRoute 中如下配置即可:
public void configRoute(Routes me) {
me.setBaseViewPath("/_view");
me.add("/", IndexController.class);
}
RenderFactory
JFinal 3.0 对 render 模块做了全面重构,抽取出了IRenderFactory接口,而原来的RenderFactory成为了接口的默认实现类,去除了原来的IMainRenderFactory、IErrorRenderFactory、IXmlRenderFactory三个接口,所有对 render 的扩展与定制全部都可以通过继承RenderFactory来实现,3.0版本的render模块可对所有render进行切换与定制,并且扩展方式完全一致。如果老项目对IMainRenderFactory做过扩展,只需要照如下方式进行升级:
public class MyRenderFactory extends RenderFactory {
public Render getRender(String view) {
return new MyRender(view);
}
}
同理,如果以前对 IErrorRenderFactory 或者 IXmlRenderFactory 做过扩展的,只需要在上面的MyRenderFactory类中添加上getErrorRender(…) 与 getXmlRender(…) 方法即可。扩展完以后在configConstant 中进行如下配置:
public void configConstant(Constants me) {
me.setRenderFactory(new MyRenderFactory());
}
JFinal 3.0 对所有render扩展,采取了完全一致的扩展方式,学习成本更低,使用更方便,升级也很方便。此外,原来RenderFactory类中的me() 已经被取消,老项目对此有依赖的只需要将RenderFactory.me() 直接改为RenderManager.me().getRenderFactory() 即可。
其它
Ret.put(…).put(…)这种链式用法,需要改成Ret.set(…).set(…),因为Ret改为继承自HashMap,为了避免与HashMap.put(…)相冲突。Ret.get(…)方法返回泛型值的场景改为Ret.getAs(…)。
configConstant(…) 的Constants 参数中的setFreeMarkerExtension、setVelocityExtension 方法统一改为使用setViewExtension方法。setMainRenderFactory、setErrorRenderFactory被setRenderFactory取代。
renderXml(…)方法依赖的XmlRender由原来Freemarker语法实现改成了由JFinal Template Engine实现,用到renderXml(…)的项目需要修改模板内容。
选择支付方式:
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间