JFinal+Tomcat+Velocity在.vm页面中无法获取application对象
@JFinal 你好,想跟你请教个问题:我在使用JFinal+Tomcat+Velocity的时候,使用了render()方法返回.vm文件,但是vm文件里使用${application.getAttribute('com.nokia.lacama.CONFIG')}为空值,我使用<title>4Budget $application</title>结果显示是4Budget $application,说明连application对象都没有,能帮我看看怎么回事吗?PS.这是我的controller代码,确定在controller中获取application的属性还是有的:
public void index() {
setAttr("approvePage", Preapprovalattibute.me.find("select * from pre_approval_attribute"));
setAttr("body", "/preapproval/empty.vm");
Configuration config = (Configuration) JFinal.me().getServletContext().getAttribute("com.nokia.lacama.CONFIG");//此时还是有值的
render("/template/lacama.vm");
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
试了没有用,而且我在config里其实已经配置了me.setViewType(ViewType.VELOCITY);
回复 @V字仇杀 : 这个application貌似要自己setAttr中才能获取吧
回复
如果setAttribute的话,key应该是叫什么呢,我的理解是application是全局的
回复 @V字仇杀 : key自己随便定义一个,去试试
render("/template/lacama.vm"); 是用这个吧:renderVelocity("/template/lacama.vm");
默认是freemarker视图
能麻烦放下3行代码吗,我刚学jfinal,还不知道怎么改这个框架
回复 @V字仇杀 : public void intercepte(Invocation inv) { inv.invoke(); inv.getController().setAttr("application", JFinal.me().getServletContext()); }
回复
非常感谢!
velocity 没有用过,所以只能给出一点猜测:通用模板一般希望做成可独立使用不依赖于第三方的东东,所以默认不会与 servlet 规范耦合,所以在使用时,类似于 application 这样约定的变量其实是在模板核心的基础之上针对 serlvet 添加的额外支持。
所以,参考一下 com.jfinal.ext.interceptor.SessionInViewInterceptor.java 这个源码,自己实现一个可以 $application 值的功能,极度简单,三行左右代码