Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/03/2008, 14:00
lordmaelwys
 
Fecha de Ingreso: octubre-2007
Mensajes: 34
Antigüedad: 16 años, 7 meses
Puntos: 0
(2) Listados desplegadles (o combos) dependientes (SOLUCION) JSP+AJAX

Que tal amigos, adjunto algo que me llevo un tiempo realizarlo Listados desplegadles (o combos) dependientes.
La información original la tome de http://www.webintenta.com/combos-dependientes-ii.html realizados en PHP, pero que la adecue para jsp

En este caso, ocupe Ajax-jsp-oracle y lo realice en Netbeans.

Primero creamos una JSP llamada por ejemplo "calificadores.jsp" y copia este código:


Código:
<script type="text/javascript">
var peticion = false;
var  testPasado = false;
try 
{
        peticion = new XMLHttpRequest();
    }
    catch (trymicrosoft) 
    {
    try
    {
        peticion = new ActiveXObject("Msxml2.XMLHTTP");
    } 
    catch (othermicrosoft) 
    {
        try 
        {
            peticion = new ActiveXObject("Microsoft.XMLHTTP");
        } 
        catch (failed) 
        {
        peticion = false;
        }
    }
}

if (!peticion)
alert("ERROR AL INICIALIZAR!");
 
function cargarCombo (url, comboAnterior, element_id) 
{
    //Obtenemos el contenido del div
    //donde se cargaran los resultados
    var element =  document.getElementById(element_id);
    //Obtenemos el valor seleccionado del combo anterior
    var valordepende = document.getElementById(comboAnterior)
    var x = valordepende.value
    //construimos la url definitiva
    //pasando como parametro el valor seleccionado
    var fragment_url = url+'?id_calificador='+ x ;
    element.innerHTML = '<img src="imagenes/loading.gif" />'; //opcional
    //abrimos la url
    peticion.open("GET", fragment_url); 
    peticion.onreadystatechange = function() 
    {
        if (peticion.readyState == 4) 
        {
            //escribimos la respuesta
            element.innerHTML = peticion.responseText;
        } 
    } 
   peticion.send(null); 
} 
</script>

<span class="Estilo5"><select name="calificador" 
    onchange="javascript:cargarCombo('subcalificador.jsp', 'calificador', 'div_subcalificador')" id="calificador">
</span>
    
<%
    Connection conex = support.ini.Conexion.getConexion();
    ResultSet rs = null;
    Statement st = conex.createStatement();
    try
    {
        String query =("select * from calificador order by id_calificador");
        rs = st.executeQuery(query);
        while (rs.next())
        {
            out.println("<option value='" + rs.getString("id_calificador") + "'>"+rs.getString("calificador")+"</option>");
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
   st.close();
   rs.close();
%>
</select>

<div id="div_subcalificador">
Segundo, creamos una pagina llamada "subcalificador.jsp"...y bueno, copia el codigo.

Código:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import = "java.sql.Connection"%>
<%@page import = "java.sql.DriverManager"%> 
<%@page import = "java.sql.ResultSet"%>
<%@page import = "java.sql.Statement"%>
<%@page import = "oracle.jdbc.driver.*"%>

<html>
<body>

<%
String id_calificador =  request.getParameter("id_calificador").toString();
%>

<select name="subcalificador"  id="subcalificador" class="select">

<%  
   Connection conex = support.ini.Conexion.getConexion();
   ResultSet rs1 = null;
   Statement st1 = conex.createStatement();
    try
    {
        String query1 =("select * from subcalificador where fk_id_calificador = '" + id_calificador+ "' order by id_subcalificador");
        rs1 = st1.executeQuery(query1);
        while (rs1.next())
        {
            out.println("<option>"+rs1.getString("subcalificador")+"</option>");
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    rs1.close();
    st1.close();
    support.ini.Conexion.CloseConnection(conex);     
%>
</select>

</body>
</html>

Ademas adjunto la clase para la conexion para la base de datos

Código:
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
import oracle.jdbc.driver.*;

public class Conexion
{
    static Connection conex= null;
    public static Connection getConexion()
    {    
        try
        {
            String driverClassName="oracle.jdbc.driver.OracleDriver";
            String driverUrl="jdbc:oracle:thin:@NOMBRE_DE_LA_BASE_DE_DATOS:PUERTO:INSTANCIA";
            Class.forName(driverClassName);
            conex = DriverManager.getConnection(driverUrl,"NOMBRE DE USUARIO DE LA BASE DE DATOS", "CONTRASEÑA");   
            System.out.println("conexion exitosa");
            
        } catch(Exception e) {
            System.out.print("no se logro conección");
            e.printStackTrace();
        } 
        return conex;
    }
    public static void CloseConnection(Connection con)
    {
        try {
            con.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
}
Script de la base de datos...
Cita:
CREATE TABLE calificador (
id_calificador NUMBER NOT NULL PRIMARY KEY,
calificador VARCHAR2(20) NULL,
fk_id_state NUMBER(1)
);

CREATE TABLE subcalificador (
id_subcalificador NUMBER NOT NULL PRIMARY KEY,
fk_id_calificador NUMBER NOT NULL REFERENCES calificador(id_calificador)
ON DELETE cascade,
subcalificador VARCHAR2(20) NULL,
fk_id_state NUMBER(1)
);


Que mas les puedo ofrecer???? espero que les sea de ayuda.

Última edición por lordmaelwys; 04/03/2008 a las 05:38