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:
Segundo, creamos una pagina llamada "subcalificador.jsp"...y bueno, copia el codigo.<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">
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:
Script de la base de datos...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(); } } }
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)
);
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.