1

我搜索了谷歌,阅读了文档等,但我仍然无法弄清楚出了什么问题。

当我尝试访问嵌套属性时,比如说${myObject.id.str}一个对象,我收到以下错误:Expected hash. myObject.id evaluated instead to freemarker.ext.beans.SimpleMethodModel. 当我删除.str并简单地尝试输出时${myObject.id},我得到Expecting a string, date or number here, Expression myObject.id is instead a freemarker.ext.beans.SimpleMethodModel. Id 实际上是一个对象 - 它是java.lang.Number. 我只是添加了该str()方法作为获取数字值的便捷方式,因为我认为返回字符串可能会有所帮助。然而,这似乎不是问题,因为问题似乎是 Id 对象本身。我开始怀疑我是否遇到了命名问题,因为调用myobject.myId似乎有效但没有myobject.id。这可能是真的,因为类名Id与属性名相同id吗?我通常不应该这么想,但是为什么会有myId相同的Id对象。

对象如下所示:

public class MyObject
{
    private Id id = null;

    @Override
    public Id getId()
    {
        return id;
    }

    @Override
    public void setId(Id id)
    {
        this.id = id;
    } 
}

id 类如下所示:

public class Id extends Number
{
    private Number id = null;

    public String getStr()
    {
        return String.valueOf(id);
    }
}

以下在模板中不起作用:

${myObject.id}

只要您没有遇到任何问题,Freemarker 文档就很好。不幸的是,在一遍又一遍地阅读文档并进行谷歌搜索之后,我仍然没有更接近解决方案。

如果有人能对此有所了解,那就太好了。

最好的问候,迈克尔

4

1 回答 1

1

就这样它可以被标记为已解决......问题是有一个继承的Java方法称为“id”(在它之前没有“get”)。由于 FreeMarker 没有为方法和其他成员使用单独的名称空间(方法是 FreeMarker 中的一等值,因此您可以在不调用它们的情况下获取它们),这将是名称冲突,并且“id”方法具有优先级在“id”JavaBean 属性上。在这种情况下,您仍然可以使用getId()来读取 JavaBean 属性。

于 2013-07-15T21:12:59.633 回答