JSRUN 用代码说话

升级到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(…)的项目需要修改模板内容。

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟