jfina使用velocity模板引擎

     velocity模板引擎的使用可以参考我的指导老师的博客velocity模板引擎使用详解,但是注意点,这个是完成以后在地址栏输入:localhost:8080/test.vm来测试的
     这里我先贴出我的工程项目结构图(开发工具是idea)
这里写图片描述
     因为一直使用jfinal框架,下面先上一个按照正常的配置完成以后,首先在YourJFinalConfig.java中设置baseViewPath为velocity

me.setViewType(ViewType.VELOCITY);

到此我原以为就可以了,在TextController中直接render(“test.vm”);

但是启动JFinal.start();方法以后,你会发现出现如下情况
这里写图片描述
sims.data();并没有引用到在velocity-toolbox.xml中sims键值对的对象中的data()放法,并且查看网页源码发现并没有启用velocity.properties中设置的default.vm默认模板,一开始我一直认为是我的配置出现了问题,折腾了一天,查看了各种velocity配置问题和初始化过程文档,但是它就是那么任性,任你怎么气急败坏,它都无动于衷,甚至因为配置不当出现各种异常(再次证明了一点,任何时候都是你的错,电脑没错。。。。),后来无意中看到别人在博客里问到为什么通过在地址栏定位到test.vm就能正常显示,er通过render就不行。这就像一个晴天霹雳,突然想起来自己一直查找问题的方向就不对,官方文档基本上可以说是不会出现什么问题的,所以问题在于自己的使用方式不对,后来我就查是不是jfinal的render实现问题,看一下源码发现确实是jfinal的VelocityRender问题,并不能render Velocity的layout
花了一天的时间,终于找到问题的根结,于是查看了一下JFinal的自定义render的实现方法,发现已经有大神实现了重写VelocityRender类的代码,查看代码
但是将其引用以后,问题又出现了,default.vm是加载了,但是sims.data仍然不起作用,这一次就没有盲目查找了,因为仔细考虑一下就可以发现,既然加载了模板,说明现在的实现是没问题的,根结可能依然是重写的VelocityRender.java,自已下查看,代码中并未加载toolbox文件,这次相信问题一定出现在这里,但是我对velocity也是刚刚开始使用,并不知道怎么去加载toolbox,但同样,准确的去网上查找以后,有大神也遇到了,查看代码,我就直接拿来用了,做了一下更改(路径),并且我使用的是JFinal3.0,IMainRenderFactory被IRenderFactory接口代替了
实现自定义的Render以后,在YourJFinalConfig中配置使用你自己的render执行forword跳转:

me.setRenderFactory(new VelocityLayoutRender.VelocityLayoutRenderFactory());

重启JFinal.start(…)方法,就成功了
这里写图片描述

尝试了各种方法以后终于找到解决方法,心情还蛮不错的,哈哈,多了一们新技术

猜你喜欢

转载自blog.csdn.net/time_travel/article/details/71699406