升级V3.5后模板引擎解析对象带点属性值时出错

1.现象:

我有个dict 字典对象,放作用域返回,我的dict对象如下:

{sort_no:1, update_time:null, code:1, field:api.desc, create_time:null, remark:null, id:24, value:测试值,field_name:api描述信息, status:1}

前端HTML编辑页面回显: 

<input type="text" name="dict.field" required="" lay-verify="required" placeholder="请输入字典项目主键(一般用英文字母)" autocomplete="off" class="layui-input"  value="#(dict.field)"/> 

-----------------------------------------------

V3.3,3.4的版本正常的,V3.5一出来积极响应马上升级了。

今天有人使用编辑页面就报错了,我测了下,

只要#(dict.field)="xxx.yyy"  中间带“.”的时候就报错,其余时候不报错,而原来低版本也不报错。

后台显示报错信息如下:

2018-十月-26 23:51:50 ERROR com.jfinal.core.ActionHandler.handle(ActionHandler.java:120) - /dict/edit/24

com.jfinal.template.TemplateException: Forbidden method: getField

Template: "/modules/system/dict/edit.html". Line: 9

at com.jfinal.template.expr.ast.Field.eval(Field.java:79)

at com.jfinal.template.stat.ast.Output.exec(Output.java:49)

at com.jfinal.template.stat.ast.StatList.exec(StatList.java:68)

at com.jfinal.template.stat.ast.Define.call(Define.java:105)

at com.jfinal.template.stat.ast.Call.exec(Call.java:49)

at com.jfinal.template.stat.ast.StatList.exec(StatList.java:68)

at com.jfinal.template.stat.ast.Define.call(Define.java:105)

at com.jfinal.template.stat.ast.Call.exec(Call.java:49)

at com.jfinal.template.stat.ast.StatList.exec(StatList.java:68)

at com.jfinal.template.Template.render(Template.java:59)

-------------------------------------------

对比了下这部分源代码,好像改过了。

image.png

我初步推断是把这个"."推断成某个对象的某个方法或属性。比如我的dict.field="api.desc" ,页面value="#(dict.field)"解析是不是搞成了 dict.api.desc去取dict对象的api对象的desc属性了。画面就报错了

image.png

有点晚了没跟代码细调,明天再看看,请教大家遇到过没呢?有什么快速解决办法木有?

评论区

JFinal

2018-10-27 02:26

jfinal 3.5 对 getField() 方法做了调用的限制,可以改成下面的代码来获取这个字段值:
#(dict.get("field"))

jfinal 3.6 已经放开了对 getField() 的限制

prelove

2018-10-27 09:18

@JFinal 感谢波总回复!马上改来试试,放开感觉更方便些~

5207

2019-01-25 11:07

刚升级就遇到这问题了。。。

热门反馈

扫码入社