项目背景 :jfinal2.2+freemark
改造开始
1、按照 老项目的春天来了!姿势正确,心情愉快的使用上enjoy sql管理功能 这篇分享用上enjoy-sql
2、将com.jfinal.render.TemplateRender复制到自己的项目里面
3、初始化enjoy。我是在继承JFinalConfig的类里面新增了一个configEngine方法,然后在afterJFinalStart方法里面调用configEngine方法。大家可以直接将configEngine方法的内容放到afterJFinalStart里面。代码如下:
/** * 初始化jfinal模板 */ public void configEngine(){ Engine engine = new Engine("JFinal Web"); engine.setDevMode(PropKit.getBoolean("devMode", true));//是否是开发者模式 engine.setBaseTemplatePath(PathKit.getWebRootPath());//设置模板根目录 engine.addSharedFunction("/WEB-INF/view/common/index_layout.html");//设置页面统一布局模板 engine.addSharedFunction("/WEB-INF/view/common/attendance_tabbar.html");//微信考勤底部菜单按钮 //初始化jfinal enjoy TemplateRender.init(engine); } @Override public void afterJFinalStart() { configEngine(); }
4、开始使用:render(new TemplateRender("index.html")),我觉得这样有点麻烦。为了偷懒,我直接创建了一个BaseController继承jfinal的Controller,然后在BaseController里面增加了一个方法,要使用enjoy的的controller都继承这个BaseController就可以了。代码如下:
public class BaseController extends Controller { /** * 使用jfinal模板引擎 * @param view 模板路径 */ public void renderEnjoy(String view){ render(new TemplateRender(view)); } } public class TestController extends BaseController { public void index(){ renderEnjoy("index.html"); } }
好了!用波总的话说就是:打完收枪!
番外
项目开始没有使用jinal3的原因是因为我进公司的时候,项目一期已经完成,老板我要做的事情就是在一期的基础上进行二次开发。当时jfinal3已经发布了,我也用jfianl接了几个单子做了。所以看到model里面大段大段的拼接sql代码的时候,我的内心是崩溃的;要我这样写,我的内心是拒绝的。我又不敢贸然的将项目升级到jfinal3。就只能一边痛苦的在model中拼sql,一边找方法用上enjoy作为sql的模板。直到几个月以后,我的救星来了!它就是 老项目的春天来了!姿势正确,心情愉快的使用上enjoy sql管理功能 按照这篇分享,马上改造了项目,sql管理就这样解决了!在这里特别感谢这位同学的无私分享!一周以后我又觉得不舒服了,因为以前没用过freemark,所以freemark的标签知道得不多,得经常去查freemark的使用文档,用起来相当不顺手!于是就产生了用enjoy替代freemark的想法。既然sql都能用enjoy管理,页面应该也应该可以用enjoy作为模板。然后我就去看jfinal的源码,运行jfinal3.0的项目,看TemplateRender是怎么执行的,结合波总平时给大家的分享。让我找到了老项目也能用enjoy做模板引擎的方法。而且使用起来和jfinal3无异。如果大家有更好的办法,请告诉我,让我能多学点是一点!
这是彩蛋
不要相信爱迪生说的:天才是九十九分的勤奋再加上一分的灵感!程序员天生就是为偷懒而生的!写程序要有偷懒的想法,这样才能用更少的代码做更多的事情,才容易创造新的东西。虽然有时候会因为这个偷懒的想法耗费更多的时间,但是当解决这个问题的时候那种成就感是非常舒服的!程序员也不要怕尝试!代码中的错误、异常也是程序员的一大笔财富!!!
这个方案还有一个可以改进的地方,老版本的 jfinal 也是可以通过 IRenderFactory 切换底层的 main render 的,通过实现 IRenderFactory 接口,可以将 Controller.render(String view) 这个方法的 view type 给切换到 enjoy
当然,如果你的老系统中 render(String view) 仍然在使用 freemarker 之类的使用 BaseController 扩展是最好的
感谢分享,点赞 + 收藏