NumberFormatException ArrayList size使用JSTL的JSP中的Javabean方法

时间:2012-10-11 22:50:55

标签: jsp jstl javabeans numberformatexception

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

Error Message

2 个答案:

答案 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}"/>