javax.el.PropertyNotFoundException:在JSP中使用JSTL
我有一个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。
没有找到相关结果
已邀请:
3 个回复
视蕉梁拌客
(即使你有一个首字母缩略词,它应该像普通词一样大写)。在EL中,当您指定属性名称时,它实际上最终会调用该属性的getter。要计算出吸气剂的名称,它会将您提供的属性名称中的第一个字母大写(因此
转换为
)并将
固定在它的前面。所以你最终得到了
。但是,您已将方法命名为
。 Java无法找到该方法,因此您获得了
异常。 如果您没有正确命名您的getter,则无法使用EL访问它们。
锯康
,你需要
。 这也是在JavaBeans Spec中指定的。 8.8推断名称的大写。 当我们使用设计模式来推断属性或事件名称时,我们需要确定哪些规则 跟随大写推断名称。如果我们从正常的中间提取名称 mixedCase样式的Java名称,默认情况下,名称将以大写字母开头。 Java程序员习惯于使用小写字母开头。 强有力的评论者输入使我们确信我们应该遵循同样的传统规则 属性和事件名称。 因此,当我们从现有Java名称的中间提取属性或事件名称时,我们 通常将第一个字符转换为小写字母。但是要支持偶尔使用所有 大写名称,我们检查名称的前两个字符是否都是大写和if 所以不管它。所以,例如, “FooBah”成为“fooBah” “Z”变为“z” “网址”变为“网址” 我们提供了一个实现此转换规则的方法Introspector.decapitalize。 JSP EL(表达语言,那些
事物)遵循JavaBeans规范。因此,这与JSTL(那些
标签)没有特别的关系。
了驳
当我尝试在jsp页面中访问它时,如下所示,它给出以下错误javax.el.PropertyNotFoundException:在类型DocumentPolicyVO上找不到属性'Id'
请任何人解释原因。