我对JSTL和Javabeans来说有点新鲜,所以我在解决这个问题时遇到了很多麻烦。
我有一个index.jsp,一个名为CustomerScheme的类,它扩展了一个ArrayList,以及一个我用于输出的test.jsp。
index.jsp包含以下代码,并且包含指向test.jsp的链接:
<jsp:useBean id="scheme" scope="session" class="customer.beans.CustomerScheme">
<%
// Open a stream to the init file
InputStream stream =
application.getResourceAsStream("/fm.txt");
// Get a reference to the scheme bean
CustomerScheme custScheme =
(CustomerScheme) pageContext.findAttribute("scheme");
// Load colors from stream
try {
custScheme.load(stream);
} catch (IOException iox) {
throw new JspException(iox);
}
%>
</jsp:useBean>
test.jsp包含:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
${scheme.size}
CustomerScheme扩展了ArrayList,并具有以下方法:
public int getSize() {
return this.size();
}
CustomerScheme有更多代码。如果你需要,我会发布它。
我的问题是这个:每当我运行程序时,我都会从index.jsp开始,单击链接转到test.jsp,然后获取以下内容:
答案 0 :(得分:2)
javax.el.ListELResolver
处理java.util.List
类型的基础对象。它接受任何对象作为属性,强制该对象成为列表中的整数索引。
因此,您需要调用getSize()
方法 - ${scheme.getSize()}
或使用<jsp:getProperty/>
或者,您可以在List<T>
中创建customer.beans.CustomerScheme
,而不是扩展ArrayList<T>
。
public class CustomerScheme{
private List<Customer> list=new ArrayList<Customer>();
public int getSize(){
return list.size();
}
..
}
答案 1 :(得分:0)
如果您不想创建额外的包装类,可以执行以下操作:
<c:set var="size"><jsp:getProperty name="scheme" property="size"/></c:set>
size : <c:out value="${size}"/>