我有一个 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:在 RSSFeedOccurrenceMiner 类型上找不到属性“rssFeedURLs”
鉴于我对继承的使用,这是正确的。那么谁能告诉我 JSTL 是否允许继承或者我的代码中是否缺少某些内容?
我真的不想在 JSP 中使用 scriptlet。
您的 getter 方法不遵循 JavaBeans 命名约定。应该命名为getRssFeedURLs
(即使您有首字母缩略词,也应该像普通单词一样大写)。在 EL 中,当您指定属性名称时,它实际上最终会调用该属性的 getter。为了找出 getter 的名称,它将您提供的属性名称中的第一个字母大写(因此rssFeedURLs
被转换为RssFeedURLs
)并继续get
到它的前面。所以你最终会得到getRssFeedURLs
。但是,您已将您的方法命名为getRSSFeedURLs
。 Java 找不到该方法,所以你得到一个PropertyNotFoundException
例外。
如果您没有正确命名 getter,则无法使用 EL 访问它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)