2

我对 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,然后得到以下内容:

错误信息

4

2 回答 2

2

javax.el.ListELResolver句柄类型的基础对象java.util.List。它接受任何对象作为属性并将该对象强制转换为列表中的整数索引。

所以你需要调用该getSize()方法 -${scheme.getSize()}或使用<jsp:getProperty/>

或者,您可以创建一个List<T>incustomer.beans.CustomerScheme而不是扩展ArrayList<T>.

public class CustomerScheme{
  private List<Customer> list=new ArrayList<Customer>();
  public int getSize(){
         return list.size();
  }
  ..
}
于 2012-10-13T07:54:12.337 回答
0

如果您不想创建额外的包装类,可以执行以下操作:

<c:set var="size"><jsp:getProperty name="scheme" property="size"/></c:set>
size : <c:out value="${size}"/>
于 2012-11-14T19:18:12.993 回答