1.扩展Jfinal(jfinal-3.4):(JFinal 极速开发 官方网站,详细说明都有 )
平时自己处理项目遇到的一些问题,对jfinal进行了部分扩展,方便项目使用.
1) JFinalConfig扩展:
JFinalConfig子类需要实现六个抽象方法
public class DemoConfig extends JFinalConfig {
public void configConstant(Constants me) {}
public void configRoute(Routes me) {}
public void configEngine(Engine me) {}
public void configPlugin(Plugins me) {}
public void configInterceptor(Interceptors me) {}
public void configHandler(Handlers me) {}
}
我主要扩展了configRoute中的功能:
原先 添加路由都是使用 :me.add("/hello",HelloController.class,"/hello"); 分别对应/hello路径
但是这样会有一个问题就是如果我需要其他额外的地址(比如我需要一个/user路径),这个时候需要在代码中在添加 me.add("/user",**.class,"/user");
如果有多个目录路径则需要代码中加入,这样对于我这么一个偷懒的人来说太痛苦了,我的原则是越方便越好,无需做多余步骤,即可动态化处理。
于是我动了动态化处理这方面的操作,于是我改造了这部分代码如下():
jfinal启动前,可以调用addRoute方面将路由设置,启动即可。
web.xml中配置
可以在EmContentExtListener中读取配置文件,调用addRoute来设置(这样以后可以无需修改代码即可添加路由页面,具体代码不表。。。)
2. web服务运行中,动态化添加某个路由:
比如原先已有一个controller( WebActionController ),访问地址 /WebAction/page/addRoute?action=/NewAction&pagefolder=/NewActionFolder (动态添加一个路由)
//传入参数 action=/NewAction&pagefolder=/NewActionFolder
WebActionController 中的部分代码:
添加路由打制这个代码,此时添加后,还无法进行/NewAction/page/***链接访问,因为还未进行jfinal的刷新。
Jfinal刷新路由需要进行两个步骤:
此时代码方面的刷新已经可以了,但是如果你直接访问地址时,还是会提示未访问到页面404错误,这个问题困扰了我很久,我debug了很久后来找到Filter中才发现问题:
其中的代码:init中: handler = jfinal.getHandler();
这个时候你会发现,只有初始化的情况下才加载handler,而当路由进行更新的情况下handler没有进行更新(routes没有更新)导致请求地址无效,故需要代码进行下处理来刷新下该Filter下的handler,
于是我加了一个判断是否需要更新的功能:
当进行jfinal地址访问时,如果地址结尾为_reload_filter_handler,则进行handler的重新读取,来刷新handler,这样就刷新了handler(jfinal的路由也刷新了),既可以进行新添加路由的地址访问:/NewAction/page/pageview.