JFinal框架,使用el表达式取值报错:does not have the property

问题

在使用JFinal时,使用el表达式取值报错:does not have the property

分析

通过查看JFinal源码发现:
在ActiveRecord模型中,modelClass继承自Model之后,
即可使用modelClass的实例进行数据的查询操作。
比如:

public class User extends Model<User> {
    public static final User dao = new User();
}

可直接使用 User.dao.find(sql, params) 进行数据库的查询操作
查询返回一个 List,List中存放的是User。

但是,在User类中没有定义任何属性和getter/setter方法。
在ActiveRecord中,获取的数据使用Map格式进行传递。
Map里的Key和Value分别对应columnName和columnValue。

User继承Model之后,便拥有了Model的getAttrs()方法。
JFinal会将查询结果填充到Model的attrs中,一条数据对应一个Model (attrs)
在User中直接使用getAttrs()即可获取到查询的结果——一个User对应一条数据

解决方案

网上朋友也遇到这个问题:http://www.oschina.net/question/86425_93404

${sessionUser.loginname }
${sessionUser["loginname"] }

以上常用的方式, 都无法获取。
想先获取Map,再获取Map里面的值

${sessionUser.attrs }

却无法获取Map,仔细一看发现 User继承Model的getAttrs()方法是protected的。
所以在 User中添加了一个方法

public Map<String, Object> getAttrs(){
    return super.getAttrs();
}

然后查看

${sessionUser.attrs }

OK,继续:

${sessionUser.attrs["loginname"] }

成功!

你可能感兴趣的:(jFinal)