这个问题在这里已经有了答案:
javax.el.PropertyNotFoundException when second character of property name is a capital
(1 个回答)
去年关闭。
我有一个 JSP,我试图在其中使用 JSTL 标记来显示类的内存实例中的数据。数据由一系列字符串组成,其中每个字符串都是 RSS 提要的地址。
在 JSP 中,我有以下代码:
<table border = "1">
<tr>
<c:forEach var = "rssFeedURL" items = "${rssfom.rssFeedURLs}">
<td align = "left">${rssFeedURL}</td>
</c:forEach>
</tr>
</table>
基本上, rssfom 是以下类的实例:
public class RSSFeedOccurrenceMiner extends RSSFeedMiner {
private HashMap<String, Counter> keywordFrequencies;
public RSS_Feed_OccurrenceMiner() {
super();
this.keywordFrequencies = new HashMap();
}
...
}
它继承自 RSSFeedMiner 类,该类包含以下变量和方法:
private ArrayList<String> rssFeedURLs;
public ArrayList<String> getRSSFeedURLs() {
return rssFeedURLs;
}
public void setRSSFeedURLs(ArrayList<String> rssFeedURLs) {
this.rssFeedURLs = rssFeedURLs;
}
所以在 JSP 中,我以为我可以使用上面的代码,但是当页面运行时,我只是收到一个空表。在服务器日志中,我倾向于找到消息:
javax.el.PropertyNotFoundException: Property 'rssFeedURLs' not found on type RSSFeedOccurrenceMiner
鉴于我使用继承,这是正确的。那么谁能告诉我 JSTL 是否允许继承,或者我的代码中是否缺少某些内容?
我真的不想在 JSP 中使用 scriptlet。
最佳答案
您的 getter 方法不遵循 JavaBeans 命名约定。它应该被命名为 getRssFeedURLs
(即使您有首字母缩略词,也应该像普通单词一样大写)。在 EL 中,当您指定属性名称时,它实际上最终会调用该属性的 getter。要找出 getter 的名称,它将您提供的属性名称中的第一个字母大写(因此 rssFeedURLs
被转换为 RssFeedURLs
)并添加 get
到它的前面。所以你最终得到 getRssFeedURLs
.但是,您已将方法命名为 getRSSFeedURLs
. Java 找不到该方法,因此您会收到 PropertyNotFoundException
异常(exception)。
如果你没有正确命名你的 getter,你就不能用 EL 访问它们。
关于jsp - javax.el.PropertyNotFoundException : using JSTL in JSP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4118610/