【问题标题】:c:forEach throws javax.el.PropertyNotFoundException: Property 'foo' not found on type java.lang.Stringc:forEach 抛出 javax.el.PropertyNotFoundException:在 java.lang.String 类型上找不到属性 'foo'
【发布时间】:2016-09-22 03:41:45
【问题描述】:

我的项目使用 hibernate 3.4.0 GA 访问数据库,使用 Spring MVC 2.5.6 处理 web 请求和 jsp(jstl) 呈现视图(网页)。

我通过休眠从数据库中获取实体列表,并将其作为模型添加到 jsp 的模型映射中。当 jsp 呈现我的网页时,它会抛出“javax.el.PropertyNotFoundException”。

javax.el.PropertyNotFoundException:在 java.lang.String 类型上找不到属性“时间戳”

异常来自:

<c:forEach var="statusHistory" items="statusHistoryList">
    ${statusHistory.timestamp}
</c:forEach>

似乎“statusHistory”被认为是一个字符串,而不是一个对象。

“StatusHistory”类有“timestamp”属性和getter方法:

public Class StatusHistory{
    ...
    private Date timestamp;
    public Date getTimestamp(){...}
    ...
}

我在谷歌上搜索了一整天。一些帖子说 getter 方法不遵循约定。但这似乎不是我的情况。
有人可以帮我吗?

提前致谢 安德鲁

【问题讨论】:

    标签: jsp foreach jstl el propertynotfoundexception


    【解决方案1】:

    这里,

    <c:forEach var="statusHistory" items="statusHistoryList">
    

    您为&lt;c:forEach&gt;items 属性提供了一个值为"statusHistoryList" 的普通字符串,而该字符串实际上没有getTimestamp() 方法。

    您需要使用 EL 表达式 ${...} 来引用它。

    <c:forEach var="statusHistory" items="${statusHistoryList}">
        ${statusHistory.timestamp}
    </c:forEach>
    

    【讨论】:

    • statusHistoryList 是 List,我使用 jstl/core:forEach 方法对其进行迭代。你的意思是在jsp中访问数据的方式不对吗?
    • 您是否将我答案中的代码 sn-p 与您的进行了比较?注意items 属性现在是如何设置的。要了解有关 EL 的更多信息,请查看我们的 wiki 页面stackoverflow.com/tags/el/info
    • 哦,我在帖子中输入错误。在我的 .jsp 代码中是“${statusHistoryList}”。
    • 那么你要么没有运行你认为你正在运行的代码(保存、重建、重新部署、重启等),要么你的控制器实际上放了一个String,而不是@987654331 @ 在范围内。例如。通过request.setAttribute("statusHistoryList", "statusHistoryList") 而不是request.setAttribute("statusHistoryList", statusHistoryList)
    • k.你说的对。我在控制器中犯了一个愚蠢的打字错误。太谢谢你了
    【解决方案2】:

    在我的情况下,我没有将implements java.io.Serializable 添加到 bean,所以它没有识别 bean 的属性

    以下是区分 JavaBean 的独特特征 来自其他 Java 类 -

    It provides a default, no-argument constructor.
    
    It should be serializable and that which can implement the Serializable interface.
    
    It may have a number of properties which can be read or written.
    
    It may have a number of "getter" and "setter" methods for the properties.
    

    Reference tutorialspoint-JSP

    添加后问题就解决了。

    【讨论】:

    • 从另一个问题中删除了其他答案
    【解决方案3】:

    保持原样

    <c:forEach var="statusHistory" items="${statusHistoryList}">
               ${statusHistory.timestamp}
    </c:forEach>
    

    确保检查 forEach 循环中的项目,有时由于额外的空间,它就像一个字符串。尝试重新输入。

    【讨论】:

      猜你喜欢
      • 2012-06-06
      • 2017-09-01
      相关资源
      最近更新 更多