我正在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

07-24 09:22