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

Mr *_*gan 10 jsp jstl el propertynotfoundexception

我有一个JSP,我正在尝试使用JSTL标记来显示类的内存实例中的数据.数据由一系列字符串组成,其中每个字符串是RSS提要的地址.

在JSP中,我有以下代码:

<table border = "1">
    <tr>
        <c:forEach var = "rssFeedURL" items = "${rssfom.rssFeedURLs}">
            <td align = "left">${rssFeedURL}</td>
        </c:forEach>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

基本上,rssfom是以下类的实例:

public class RSSFeedOccurrenceMiner extends RSSFeedMiner {

   private HashMap<String, Counter> keywordFrequencies;

   public RSS_Feed_OccurrenceMiner() {
      super();
      this.keywordFrequencies = new HashMap();
   }
   ...
}
Run Code Online (Sandbox Code Playgroud)

这继承自RSSFeedMiner类,它包含以下变量和方法:

private ArrayList<String> rssFeedURLs;

public ArrayList<String> getRSSFeedURLs() {
    return rssFeedURLs;
}

public void setRSSFeedURLs(ArrayList<String> rssFeedURLs) {
    this.rssFeedURLs = rssFeedURLs;
}
Run Code Online (Sandbox Code Playgroud)

所以在JSP中,我以为我可以使用上面的代码但是当页面运行时,我只是收到一个空表.在服务器日志中,我倾向于找到消息:

javax.el.PropertyNotFoundException:在类型RSSFeedOccurrenceMiner上找不到属性'rssFeedURLs'

鉴于我对继承的使用,这是正确的.那么有人能告诉我JSTL是否允许继承或者我的代码中是否缺少某些内容?

我真的不想在JSP中使用scriptlet.

Viv*_*ath 23

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

如果您没有正确命名您的getter,则无法使用EL访问它们.


Bal*_*usC 10

如果属性名称以两个或更多后续大写字母开头,则应该像EL中那样访问它.所以,要访问getRSSFeedURLs()你需要的getter ${rssfom.RSSFeedURLs}.

这也是在JavaBeans Spec中指定的.

8.8推断名称的大写.

当我们使用设计模式来推断属性或事件名称时,我们需要确定要使用推断名称大写的规则.如果我们从普通的mixedCase样式Java名称的中间提取名称,那么默认情况下,名称将以大写字母开头.Java程序员习惯于使用小写字母开头.严谨的审稿人输入使我们确信我们应该遵循同样的传统规则来处理财产和事件名称.

因此,当我们从现有Java名称的中间提取属性或事件名称时,我们通常会将第一个字符转换为小写.但是为了支持偶尔使用所有大写名称,我们检查名称的前两个字符是否都是大写,如果是这样,请不要管它.所以,例如,

"FooBah"变成"fooBah"
"Z"变成"z"
"URL"变成"URL"

我们提供了一个实现此转换规则的方法Introspector.decapitalize.

JSP EL(表达式语言,那些${}东西)遵循JavaBeans规范.因此,这与JSTL(那些<c:xxx>标签)没有特别的关系.


归档时间:

查看次数:

23768 次

最近记录:

9 年,4 月 前