我有自己想要在自定义标签中使用的对象集合。但是我只能获得一次集合元素,因为它在获取后会迭代到下一个。所以我决定定义一个变量。但它不起作用。
<jsp:useBean id="rw" scope="request" class=
"by.epam.web.libruary.transferobject.AvailableBookSet">
<c:set var="element"
value="${rw.element}"
scope="page"/>
<mytag:bodyattr num="${rw.size}">
<form name="orderBook" method="POST" action="${controllerpage}">
<input type="submit" name="submit"
value="${rw.element.shortinfo}">
</form>
</mytag:bodyattr>
</jsp:useBean>
以下是收集本身的代码:
public class AvailableBookSet extends java.util.HashSet {
private java.util.Iterator it;
@SuppressWarnings("unchecked")
public AvailableBookSet(){
try {
//Retrieving info from DataBase (100% working code)
} catch (CannotTakeConnectionException e) {
}
}
public String getSize(){
it = this.iterator();
return Integer.toString(this.size());
}
public Object getElement(){
return it.next();
}
}
这是我的例外:
org.apache.jasper.JasperException: An exception occurred processing JSP page /jsp/available_books.jsp at line 51
48:
49: <jsp:useBean id="rw" scope="request" class=
50: "by.epam.web.libruary.transferobject.AvailableBookSet">
51: <c:set var="element"
52: value="${rw.element}"
53: scope="page"/>
54: <mytag:bodyattr num="${rw.size}">
非常感谢你的帮助。
答案 0 :(得分:1)
除非您在帖子中省略了某些关键代码,否则在调用it
方法时null
为.getElement()
。然后,对.next()
的调用将抛出NullPointerException
。
尝试颠倒这两行的顺序:
<c:set var="element" value="${rw.element}" scope="page"/>
<mytag:bodyattr num="${rw.size}">