c:forEach 抛出 javax.el.PropertyNotFoundException:在 java.lang.String 类型上找不到属性 'foo'
Posted
技术标签:
【中文标题】c:forEach 抛出 javax.el.PropertyNotFoundException:在 java.lang.String 类型上找不到属性 \'foo\'【英文标题】:c:forEach throws javax.el.PropertyNotFoundException: Property 'foo' not found on type java.lang.Stringc:forEach 抛出 javax.el.PropertyNotFoundException:在 java.lang.String 类型上找不到属性 'foo' 【发布时间】:2011-09-03 01:25:29 【问题描述】:我的项目使用 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 方法不遵循约定。但这似乎不是我的情况。 有人可以帮我吗?
提前致谢 安德鲁
【问题讨论】:
【参考方案1】:这里,
<c:forEach var="statusHistory" items="statusHistoryList">
您为<c:forEach>
的items
属性提供了一个值为"statusHistoryList"
的普通字符串,而该字符串实际上没有getTimestamp()
方法。
您需要使用 EL 表达式 $...
来引用它。
<c:forEach var="statusHistory" items="$statusHistoryList">
$statusHistory.timestamp
</c:forEach>
【讨论】:
statusHistoryList 是 Listitems
属性现在是如何设置的。要了解有关 EL 的更多信息,请查看我们的 wiki 页面***.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 循环中的项目,有时由于额外的空间,它就像一个字符串。尝试重新输入。
【讨论】:
以上是关于c:forEach 抛出 javax.el.PropertyNotFoundException:在 java.lang.String 类型上找不到属性 'foo'的主要内容,如果未能解决你的问题,请参考以下文章