JFinal+Beetl国际化出错

微笑的书生 发布于 2015/08/22 09:53
阅读 417
收藏 1

@闲.大赋 你好,想跟你请教个问题:

我使用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')} // 第二种写法

我觉得第一种才是合理的,也是我想要的,但是会出问题,该如何破?

(还有其他的方法吗?有的话也请告诉我,谢谢了。

加载中
1
闲大赋
闲大赋

http://www.oschina.net/news/64401/beetl-2-2-4 这是更新日志。GeneralGet 通常是字符串为参数,但Res的Get方法确实Object,所以我在2.2.4 版本调整了对GeneralGet的处理

闲大赋
闲大赋
@张露兵 2.2.4 发布出错了,只能下个版本看看能不能发到中央仓库里
微笑的书生
微笑的书生
我刚试了下2.2.4,问题已经愉快地解决了,谢谢哈!不过我看发布时间是一个月前,为什么还没有推到中央仓库,我以为2.2.3是最新的版本呢。
0
JFinal
JFinal

   让 beetl 支持一下 Res.get(String) 这个方法的 ${_res['app.name']} 即可,beetl 对于读取的支持应该有扩展的接口可用。

   另外,可以试试beetl 之下使用 ${_res.app.name} 这种方式,或许可以。

JFinal
JFinal
回复 @张露兵 : beetl 应该提供了 get 方法的扩展的,问下 @闲.大赋
微笑的书生
微笑的书生
我在群里也和一些朋友讨论过这个问题,应该需要beetl模板引擎支持get方法才行。另外,${_res.app.name}这样写也是不行,目前我只能直接调用get方法:${@_res.get('app.name')}。
0
闲大赋
闲大赋

用最新版本,2.2.4   ${_res.app.name} 支持,以前版本对jfinal2 的res支持有问题

返回顶部
顶部