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)
-------------------------------------------
对比了下这部分源代码,好像改过了。
我初步推断是把这个"."推断成某个对象的某个方法或属性。比如我的dict.field="api.desc" ,页面value="#(dict.field)"解析是不是搞成了 dict.api.desc去取dict对象的api对象的desc属性了。画面就报错了
有点晚了没跟代码细调,明天再看看,请教大家遇到过没呢?有什么快速解决办法木有?
#(dict.get("field"))
jfinal 3.6 已经放开了对 getField() 的限制