一尘不染

javax.el.PropertyNotFoundException:在JSP中使用JSTL

jsp

我有一个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。


阅读 360

收藏
2020-06-08

共1个答案

一尘不染

您的getter方法不遵循JavaBeans命名约定。它应该被命名getRssFeedURLs(即使您有首字母缩写词,也应该像普通单词一样大写)。在EL中,当您指定属性名称时,它实际上最终会调用该属性的getter。为了弄清楚吸气剂的名称,它使用您提供的属性名称中的第一个字母大写(因此rssFeedURLs将其转换为RssFeedURLs),并附加在get其前面。所以你最终得到了getRssFeedURLs。但是,您已将方法命名为getRSSFeedURLs。Java找不到该方法,因此您会遇到PropertyNotFoundException异常。

如果您没有正确命名吸气剂,则无法使用EL访问它们。

2020-06-08