在Model中自定义一个get方法的问题

_-Leon-_ 发布于 2014/08/19 16:16
阅读 286
收藏 1

@JFinal 你好,想跟你请教个问题:

首先非常感谢您提供这样优秀的框架给我来使用,大大提高了开发效率。同时,在拜读您的源代码,对我的技术要是一个很大的提升。

我在Model中自定义了一个get方法,可是在EL表达式中无法显示,不知道是不是我写的不对,还是JFinal不是这样用的。也就是我的Model中有一个get方法,这个get方法不是数据库中的字段,是一个额外的功能,我想在页面上直接用EL显示。

举个例子:我有两张表,一个部门表,一个员工表,我在员工表中,存的是部门的Id,我想在页面上这样显示:${user.dept.deptName},我的办法是在User(继承了Model)类中,添加了一个方法,public Dept getDept(),可是在页面上不显示,不知是什么原因啊?

加载中
0
JFinal
JFinal

     由于 jstl 数据读取能力太弱,所以 jfinal 在 JspRender 做了点处理,将数据全部放入了 map 中,这样就方便 jstl 在页面这样读取 ${user.name}。

    如果想关闭这个转换行为,可以调用一下 JspRender.setSupportActiveRecord(false)。看一下 JspRender 源码就很清楚了,最后建议使用 freemarker,功能强大,使用方便。

1
xinyin025
xinyin025

如果在Model中自定义get和set方法的话,

需要在JFinalConfig的configConstant中添加JspRender.setSupportActiveRecord(false);

这样才能在页面中通过EL表达式获取到值


_-Leon-_
_-Leon-_
谢谢您的回答,这样是不是我的Model就不能使用ActiveRecord功能了?
0
_-Leon-_
_-Leon-_
例如我上述的情景,用JFinal怎么去设计呢?也就是外键存储的Id,在程序中肯定要查询出对象这种情况,只能单独查询出来,然后放在request域中传递吗?
0
_-Leon-_
_-Leon-_
我需要查询所有用户,每个用户都有部门,在显示每个用户的时候,也要显示其所属部门的名称。表的设计是多对一,用户表中存储部门的外键,那么这种情况应该怎么去做啊?
_-Leon-_
_-Leon-_
回复 @糊搞 : 多谢回答,嗯,我再琢磨琢磨。
糊搞
多表的情况下建议用Record,手册上的例子在实际使用时会有相当多的查询操作,数据量越大,性能差别越明显。 使用Record,内存中冗余数据会大,但不会造成明显负担。
_-Leon-_
_-Leon-_
回复 @JFinal : 例子我看了,也没有疑问,现在的问题就是我使用的是EL,想以对象的形式获取数据,${user.dept.deptName},想这样用。在后台程序中,user.getDept().getDeptName(),是没有问题的。
JFinal
JFinal
表关联看一下 jfinal 手册,里面有例子
0
_-Leon-_
_-Leon-_

引用来自“JFinal”的评论

     由于 jstl 数据读取能力太弱,所以 jfinal 在 JspRender 做了点处理,将数据全部放入了 map 中,这样就方便 jstl 在页面这样读取 ${user.name}。

    如果想关闭这个转换行为,可以调用一下 JspRender.setSupportActiveRecord(false)。看一下 JspRender 源码就很清楚了,最后建议使用 freemarker,功能强大,使用方便。

谢谢您的回复。源码我已经看了,我也解决了,我解决的方法是在Model中定义了一个方法,然后将我需要的键值存储到Model这个Map中,就是要手动调用一下这个方法,有点麻烦。我有一个想法,不知道行不行,就是在源码中添加一步,在 handleObject(Object value, int depth),这个方法中,有一个类型判断是  if (value instanceof Model) ,能不能在添加一个功能,就是检测一下Model中是否有自定义的get方法,如果有,将这个get方法添加到Model的map中,比如:getDept(),那么就给Mode的map添加一个键值,map.put("dept", getDept()),这样就可以在Model中自定义get方法了,不知道我的想法正确与否,还望指点。
_-Leon-_
_-Leon-_
回复 @JFinal : 赞!~
JFinal
JFinal
这个已经在计划中了,JspRender 有一处注释中应该有相关说明
返回顶部
顶部