JFinal+Beetl国际化出错
@闲.大赋 你好,想跟你请教个问题:
我使用JFinal 2.0+Beetl 2.2.3开发项目,添加了国际化拦截器:
me.addGlobalActionInterceptor(new I18nInterceptor());页面中,采用如下语法:
${_res['app.name']} // 第一种写法
第一次渲染页面没有问题,但是按F5刷新,就出现问题了:
2015-08-22 09:46:51 ERROR ActionHandler:124: /index java.lang.NoSuchMethodError: com.jfinal.i18n.Res.get(Ljava/lang/String;)Ljava/lang/Object; at com.jfinal.i18n.Res_get.value(Unknown Source) at org.beetl.core.engine.VarAttributeNodeListener$VarSquareAttribute2.evaluate(VarAttributeNodeListener.java:224) at org.beetl.core.statement.VarRef.evaluate(VarRef.java:127) at org.beetl.core.statement.PlaceholderST.execute(PlaceholderST.java:32) at org.beetl.core.statement.Program.execute(Program.java:70) at org.beetl.core.Template.renderTo(Template.java:137) at org.beetl.ext.tag.LayoutTag.render(LayoutTag.java:114) at org.beetl.core.statement.TagStatement.runTag(TagStatement.java:108) at org.beetl.core.statement.TagStatement.execute(TagStatement.java:87) at org.beetl.core.statement.Program.execute(Program.java:70) at org.beetl.core.Template.renderTo(Template.java:137) at org.beetl.core.Template.renderTo(Template.java:90) at org.beetl.ext.web.WebRender.render(WebRender.java:113) at org.beetl.ext.jfinal.BeetlRender.render(BeetlRender.java:58) at com.jfinal.core.ActionHandler.handle(ActionHandler.java:93)
若修改为直接调用get方法的话,就没有问题,比如这样:
${@_res.get('app.name')} // 第二种写法
我觉得第一种才是合理的,也是我想要的,但是会出问题,该如何破?
(还有其他的方法吗?有的话也请告诉我,谢谢了。)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
用最新版本,2.2.4 ${_res.app.name} 支持,以前版本对jfinal2 的res支持有问题
我在群里也和一些朋友讨论过这个问题,应该需要beetl模板引擎支持get方法才行。另外,${_res.app.name}这样写也是不行,目前我只能直接调用get方法:${@_res.get('app.name')}。
回复
beetl 应该提供了 get 方法的扩展的,问下
@闲.大赋
让 beetl 支持一下 Res.get(String) 这个方法的 ${_res['app.name']} 即可,beetl 对于读取的支持应该有扩展的接口可用。
另外,可以试试beetl 之下使用 ${_res.app.name} 这种方式,或许可以。
我刚试了下2.2.4,问题已经愉快地解决了,谢谢哈!不过我看发布时间是一个月前,为什么还没有推到中央仓库,我以为2.2.3是最新的版本呢。
@张露兵 2.2.4 发布出错了,只能下个版本看看能不能发到中央仓库里
http://www.oschina.net/news/64401/beetl-2-2-4 这是更新日志。GeneralGet 通常是字符串为参数,但Res的Get方法确实Object,所以我在2.2.4 版本调整了对GeneralGet的处理