JFinal+Tomcat+Velocity在.vm页面中无法获取application对象

发布于 2021-11-29 15:01:19 字数 733 浏览 828 评论 9

@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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

野心澎湃 2021-11-30 12:19:52

试了没有用,而且我在config里其实已经配置了me.setViewType(ViewType.VELOCITY);

梦里兽 2021-11-30 12:19:40

回复 @V字仇杀 : 这个application貌似要自己setAttr中才能获取吧

悟红尘 2021-11-30 12:19:22

回复
如果setAttribute的话,key应该是叫什么呢,我的理解是application是全局的

情绪失控 2021-11-30 12:19:06

回复 @V字仇杀 : key自己随便定义一个,去试试

一个人的旅程 2021-11-30 12:18:41

render("/template/lacama.vm"); 是用这个吧:renderVelocity("/template/lacama.vm");

默认是freemarker视图

拍不死你 2021-11-30 11:20:15

能麻烦放下3行代码吗,我刚学jfinal,还不知道怎么改这个框架

岁月打碎记忆 2021-11-29 22:38:08

回复 @V字仇杀 : public void intercepte(Invocation inv) { inv.invoke(); inv.getController().setAttr("application", JFinal.me().getServletContext()); }

牵你的手,一向走下去 2021-11-29 21:47:48

回复
非常感谢!

怎言笑 2021-11-29 19:37:16

   velocity 没有用过,所以只能给出一点猜测:通用模板一般希望做成可独立使用不依赖于第三方的东东,所以默认不会与 servlet 规范耦合,所以在使用时,类似于 application 这样约定的变量其实是在模板核心的基础之上针对 serlvet 添加的额外支持。

    所以,参考一下 com.jfinal.ext.interceptor.SessionInViewInterceptor.java 这个源码,自己实现一个可以 $application 值的功能,极度简单,三行左右代码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文