找不到JSP,EL属性

jac*_*web 8 java jsp jstl el

我正在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
Run Code Online (Sandbox Code Playgroud)

我必须补充一点,Entry类是public,author属性是这样声明的:

public String author;
Run Code Online (Sandbox Code Playgroud)

所以它也是公开的.当我遍历条目时,这是我的代码:

<c:forEach items="${entries}" varStatus="i">
  <c:set var="entry" value="${entries[i.index]}" />
  <li><c:out value="${entry.author}" /></li>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

entry.class.name
Run Code Online (Sandbox Code Playgroud)

返回guestbook.Entry

这些类在包留言簿中(您可以猜到),条目向量传递给pageContext.

我不知道我的做法有什么问题.有人可以帮我吗?(提前致谢!)

ska*_*man 9

JSP EL不会识别类中的公共字段,它只适用于getter方法(无论如何这都是好的做法 - 永远不要将类的状态暴露为像这样的公共字段).

所以使用

private String author;

public String getAuthor() {
   return author;
}
Run Code Online (Sandbox Code Playgroud)

代替

public String author;
Run Code Online (Sandbox Code Playgroud)

另外,您的JSTL过于复杂,可以简化为:

<c:forEach items="${entries}" var="entry">
  <li><c:out value="${entry.author}" /></li>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

甚至

<c:forEach items="${entries}" var="entry">
  <li>${entry.author}</li>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

虽然后一种形式不会将XML转义为作者名称,因此不建议使用.

最后,Vector该类已过时,您应该使用ArrayList.