c:forEach抛出javax.el.PropertyNotFoundException:在类型java.lang.String上找不到属性'foo'

时间:2011-05-27 01:13:03

标签: jsp foreach jstl el propertynotfoundexception

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

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

  

javax.el.PropertyNotFoundException:在类型java.lang.String上找不到属性'timestamp'

,例外来自:

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

似乎“statusHistory”被视为String,但不是对象。

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

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

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

提前致谢 安德鲁

3 个答案:

答案 0 :(得分:8)

在这里,

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

您正在为items <c:forEach>属性提供一个普通的字符串,其值为"statusHistoryList",而后者确实没有getTimestamp()方法。

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

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

答案 1 :(得分:-1)

在我的情况下,我没有将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

添加一次即可解决此问题。

答案 2 :(得分:-1)

喜欢

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

确保检查forEach循环中的项目,有时由于多余的空间,它的作用类似于字符串。尝试重新键入。