0

JSP ページの配列リストから自分のレコードを表示する際に問題があります。javascript onload イベントによって JSP ページを自動的にロードするたびに、データは表示されますが、プロセスは停止しません。

Categoriaクラス:

package proyecto.modelo;

public class Categoria {

    private int idcategoria;

    public int getIdcategoria() {
        return idcategoria;
    }

    public void setIdcategoria(int idcategoria) {       
        this.idcategoria = idcategoria;
    }
}

BaseDAOクラス:

package proyecto.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class BaseDAO {

    protected void cerrarConexion(Connection con) throws RuntimeException {
        try {
            if (con != null && !con.isClosed()) {
                con.close();
            }
        } catch (SQLException se) {
            System.err.println("Error: cerrarConexion: " + se);
        }
    }

    protected void cerrarResultSet(ResultSet rs) throws RuntimeException {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException se) {
            System.err.println("Error: cerrarResultSet: " + se);
        }
    }

    protected void cerrarStatement(PreparedStatement stmt)
            throws RuntimeException {
        try {
            if (stmt != null) {
                stmt.close();
            }
        } catch (SQLException se) {
            System.err.println("Error: cerrarStatement: " + se);
        }
    }

    protected void cerrarCallable(CallableStatement callstmt)
            throws RuntimeException {
        try {
            if (callstmt != null) {
                callstmt.close();
            }
        } catch (SQLException se) {
            System.err.println("Error: cerrarCallable: " + se);
        }
    }
}

CategoriaDAOクラス:

package proyecto.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import proyecto.excepcion.DAOExcepcion;
import proyecto.modelo.Categoria;
import proyecto.util.ConexionBD;

public class CategoriaDAO extends BaseDAO {

    public Collection<Categoria> listarIdCat() throws DAOExcepcion{

        Collection<Categoria> = new ArrayList<Categoria>();
        String query = "SELECT id_categoria from categoria ";
        Connection con = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;

        try {
            con=ConexionBD.obtenerConexionDirecta();
            stmt=con.prepareStatement(query);
            rs=stmt.executeQuery();

            while(rs.next()) {
                Categoria vo=new Categoria();
                vo.setIdcategoria(rs.getInt("id_categoria"));
                c.add(vo);
            }

        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarStatement(stmt);
            this.cerrarResultSet(rs);
            this.cerrarConexion(con);
        }

        return c;
    }

}

CategoriaNegocioクラス:

package proyecto.negocio;

import java.util.Collection;
import java.util.List;

import proyecto.dao.CategoriaDAO;
import proyecto.excepcion.DAOExcepcion;
import proyecto.modelo.Categoria;

public class CategoriaNegocio {

    public Collection<Categoria> listarIdCat() throws DAOExcepcion {
        CategoriaDAO dao = new CategoriaDAO();
        Collection<Categoria> lista = dao.listarIdCat();
        return lista;
    }

}

サーブレットのdoPost()方法:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    CategoriaNegocio negocio = new CategoriaNegocio();

    try {
        Collection<Categoria> lista = negocio.listarIdCat();
        request.setAttribute("IDCATEGORIA", lista);
    } catch (DAOExcepcion e) {
        System.out.println(e.getMessage());
    }

    RequestDispatcher rd = request.getRequestDispatcher("listar_idcat.jsp");
    rd.forward(request, response);
}

JSP:

<%@page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"   %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
    <head>
        <script type="text/javascript">
            window.onload = function() {
                document.formulario.submit()
            };
            document.close();
        </script>
    </head>
    <body>
        <form action="ListarIdCatServlet" method="post" name="formulario"></form>
        <table>
            <c:forEach items="${IDCATEGORIA}" var="c">
                <tr>
                    <td>${c.idcategoria}</td>
                </tr>
            </c:forEach>
        </table>
    </body>
</html>
4

1 に答える 1

1

GET リクエストでサーブレットを呼び出したいようです。あなたはこれに間違った方法で近づいています。ページの読み込み時に POST フォームを送信しないでください。サーブレットのメソッドでジョブを実行し、doGet()直接呼び出す必要があります。

次の変更を行う必要があります。

  1. サーブレットの URL パターンを に変更します/listar_idcat

  2. doPostサーブレットのメソッドの名前を に変更しますdoGet

  3. listar_idcat.jspファイルをフォルダーに移動し/WEB-INFます (これにより、エンドユーザーが直接アクセスできなくなります)。

  4. getRequestDispatcher("listar_idcat.jsp");サーブレットの呼び出しを に変更しますgetRequestDispatcher("/WEB-INF/listar_idcat.jsp");

  5. <script>JSP から全体を削除します。

  6. <form>JSP から全体を削除します。

ここで、代わりに JSP を開きますhttp://localhost:8080/context/listar_idcat(はい、.jsp拡張子なしで! サーブレットをdoGet()直接呼び出します)。

以下も参照してください。

于 2013-02-14T15:44:26.073 に答える