2

私はJSTLとJavabeansに少し慣れていないので、これを理解するのに苦労しています。

index.jsp、ArrayList を拡張する CustomerScheme というクラス、および出力に使用する 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>する代わりにを作成することもできます。customer.beans.CustomerSchemeArrayList<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 に答える