1

これは私のコードです。私には正しいようです。なぜこれを言い続けるのかわかりません:

「型 Iterator をインスタンス化できません」

これはサーブレットです:

package uges.servlets;


import jess.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Iterator;

public class Catalog extends BaseServlet {

public void doGet(HttpServletRequest request,
                   HttpServletResponse response)
    throws IOException, ServletException {
    checkInitialized();

    try {
        String customerId =
            (String) request.getParameter("customerId");
        if (customerId == null || customerId.length() == 0) {
            dispatch(request, response, "/index.html");
            return;
        }

        request.getSession().invalidate();
        HttpSession session = request.getSession();

        session.setAttribute("customerId", customerId);
        session.setAttribute("orderNumber",
                             String.valueOf(getNewOrderNumber()));

        ServletContext servletContext = getServletContext();
        Rete engine = (Rete) servletContext.getAttribute("engine");
        Iterator result =
            engine.runQuery("all-products", new ValueVector());
        request.setAttribute("queryResult", result);


    } catch (JessException je) {
        throw new ServletException(je);
    }

    dispatch(request, response, "/catalog.jsp");
}

これはディスパッチ メソッドで、BaseServlet という名前のサーブレットにあります。

protected void dispatch(HttpServletRequest request,
                        HttpServletResponse response,
                        String page)
    throws IOException, ServletException {

    ServletContext servletContext = getServletContext();
    RequestDispatcher dispatcher =
        servletContext.getRequestDispatcher(page);
    dispatcher.forward(request, response);
}

そしてこれはJSPコードです:

<HTML>
<%@ page import="jess.*" %>
<jsp:useBean id="queryResult" class="java.util.Iterator" scope="request"/>

エラーは useBean タグのクラス型の java.util.Iterator に関するものです!

例外は言う: useBean クラス属性 java.util.Iterator の値が無効です

助けてください..

前もって感謝します!

4

2 に答える 2

2

java.util.Iterator はクラスではなくインターフェイスです。あなたがしたい

<jsp:useBean id="queryResult" type="java.util.Iterator" scope="request"/>

これを確認するために、次のテスト コードを使用しました。

package org.apache.markt.so;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Q001Servlet")
public class Q001Servlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        List<String> list = new ArrayList<String>();
        list.add("item1");
        list.add("item2");

        request.setAttribute("list", list.iterator());

        RequestDispatcher rd = request.getRequestDispatcher("/so/q001.jsp");
        rd.forward(request, response);
    }
}

次の /so/q001.jsp で

<html>
<jsp:useBean id="list" type="java.util.Iterator" scope="request" />
<body>
  <p><%=list.next()%></p>
</body>
</html>

これは最新の開発ブランチの HEAD を使用していましたが、最新の Tomcat 7 リリースでも同じ結果が得られます。

于 2012-04-30T08:51:46.443 に答える
0

これが私の考えを示すJSPです。

<%@ page import="java.util.*" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%
   //for testing
   List<String> engineList = new ArrayList<String>();
   engineList.add("zero");
   engineList.add("one");
   engineList.add("two");
   engineList.add("three");
   Iterator<String> result = engineList.iterator();
   // create a list from engine result
   List<String> list = new ArrayList<String>();
   while(result.hasNext())list.add(result.next());
   request.setAttribute("list", list);
%>
<html>
<body>
Complete list is${list}
The first item is ${list[0]}. 
The second item is ${list[1]}. 
If you don't know how many items there are in result, then use JSTL 
<c:forEach var="item" items="${list}" >
        ${item}
</c:forEach>
</body>
</html>
于 2012-05-01T02:24:38.077 に答える