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">

您为&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 页面***.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'的主要内容,如果未能解决你的问题,请参考以下文章

c:foreach标签取不到值,

<c:foreach>怎么改变循环次数

使用c:forEach 控制5个换行,foreach换行

关于java中c标签foreach的用法?

关于java中c标签foreach的用法?

关于java中c标签foreach的用法?