JFinal中有关 Model 自定义属性的问题

zhyihui 发布于 2014/08/06 13:38
阅读 2K+
收藏 0

我的Model中需要添加自定义属性,一开始我想当然地调用了set(key, val)方法,当然不会成功,JFinal报了错,然后我搜下面这个帖子:

http://www.oschina.net/question/265660_150911

这个帖子中说了一种方式,就是在Model中添加自定义属性,然后给属性提供setter/getter,在setter中调用super.put(key, val)方法。

我想问的是有没有可能不在Model中添加任何属性和方法,JFinal也能把自定义属性跟数据库字段同样对待呢?

比如下面这段代码:


public class Industry extends Model<Industry> {

    public static final Industry dao = new Industry();

    /**
     * 查询所有行业分类, 带有层级关系
     * @return 所有行业顶级分类, 子分类用subIndustries键索引
     */
    public List<Industry> queryAll () {
        List<Industry> topLevels = querySubIndustry(0);

        for (Industry industry : topLevels) {
            List<Industry> subList = querySubIndustry(industry.getInt("pbc_id"));
            put("subIndustries", subList);
        }

        return topLevels;
    }
}


我不想在Industry类中添加subIndustries属性,但我又想在FreeMarker中能用到subIndustries属性,请问有没有办法呢?

上面这段代码不报错,但queryAll方法返回的Industry中都没有subIndustries属性,如下图


但从Model源码中看,put方法是将值设置到Map类型的attrs属性中去了:

private Map<String, Object> attrs = getAttrsMap();
/**
 * Put key value pair to the model when the key is not attribute of the model.
 */
public M put(String key, Object value) {
	attrs.put(key, value);
	return (M)this;
}


可是我却仍然取不到值,请问这是为什么呢?


描述地比较乱,请谅解!


以下是问题补充:

@zhyihui:如果在Model自定义一个方法来调用put方法(仅添加方法,不添加属性),就能添加自定义属性,如下: public void setSubIndustries (List<Industry> subIndustries) { put("subIndustries", subIndustries); } (2014/08/06 13:55)
加载中
0
JFinal
JFinal
什么也不用做,直接使用 put 方法就打完收工了
0
zhyihui
zhyihui

引用来自“JFinal”的评论

什么也不用做,直接使用 put 方法就打完收工了
直接调用put好像不行,获取不到值
返回顶部
顶部