我正在JSP中创建一本简单的留言簿,以学习该技术。目前,我有两个类:guestbook / GuestBook.class和guestbook / Entry.class(我还没有完成应用程序,所以我只有这些类)已添加到WEB-INF / libs /中,并且它们已正确包含。在我的文件index.jsp中,我使用的是guestbook.GuestBook类;其方法返回Vector。当我遍历条目并想打印条目的作者时,我可以看到:
javax.el.PropertyNotFoundException: Property 'author' not found on type guestbook.Entry
我必须添加Entry类是公共,并以这种方式声明author属性:
public String author;
所以它也是公开的。这是我遍历条目时的代码:
<c:forEach items="${entries}" varStatus="i">
<c:set var="entry" value="${entries[i.index]}" />
<li><c:out value="${entry.author}" /></li>
</c:forEach>
和
entry.class.name
返回guestbook.Entry
这些类在guestbook包中(您可以猜到),条目矢量传递到pageContext。
我不知道我的做法有什么问题。有人可以帮我吗? (提前致谢!)
最佳答案
JSP EL不会识别您的类中的公共字段,它只能与getter方法一起使用(无论如何都是好的习惯-永远不要将类的状态公开为这样的公共字段)。
所以用
private String author;
public String getAuthor() {
return author;
}
代替
public String author;
附带说明一下,您的JSTL过于复杂,可以简化为:
<c:forEach items="${entries}" var="entry">
<li><c:out value="${entry.author}" /></li>
</c:forEach>
甚至
<c:forEach items="${entries}" var="entry">
<li>${entry.author}</li>
</c:forEach>
尽管后一种形式不会以XML形式转义作者姓名,所以不建议这样做。
最后,
Vector
类已过时,应改为使用ArrayList
。