我的项目是使用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方法不符合约定。但似乎不是我的情况。
有人可以帮帮我吗?
提前致谢 安德鲁
答案 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.
添加一次即可解决此问题。
答案 2 :(得分:-1)
喜欢
<c:forEach var="statusHistory" items="${statusHistoryList}">
${statusHistory.timestamp}
</c:forEach>
确保检查forEach循环中的项目,有时由于多余的空间,它的作用类似于字符串。尝试重新键入。