Retroceder   Foros del Web > Programación para sitios web > Java y JSP

Respuesta
 
Herramientas Desplegado
Antiguo 03-mar-2008, 13:00   #1 (permalink)
lordmaelwys ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2007
Mensajes: 32
Idea (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-mar-2008 a las 04:38.
lordmaelwys está desconectado   Responder Citando
Antiguo 04-mar-2008, 02:26   #2 (permalink)
MK2
MK2 ha deshabilitado el karma
 
Fecha de Ingreso: enero-2007
Mensajes: 42
Enviar un mensaje por MSN a MK2
Re: (2) Listados desplegadles (o combos) dependientes (SOLUCION) JSP+AJAX

Fantástico! Gracias por tu tiempo! Ahora no lo necesito pero me lo pongo en favoritos... quizá algún día sea necesario :)
MK2 está desconectado   Responder Citando
Antiguo 04-mar-2008, 04:57   #3 (permalink)
GreenEyed tiene algunos puntos positivos de karma
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.487
Re: (2) Listados desplegadles (o combos) dependientes (SOLUCION) JSP+AJAX

Creo que habría que reparar bastante ese código.
__________________
TAANSTAFL - Para obtener respuestas inteligentes, lo mejor es empezar por preguntar de forma inteligente.
GreenEyed está desconectado   Responder Citando
Antiguo 04-mar-2008, 05:28   #4 (permalink)
lordmaelwys ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2007
Mensajes: 32
Re: (2) Listados desplegadles (o combos) dependientes (SOLUCION) JSP+AJAX

Cita:
Iniciado por GreenEyed Ver Mensaje
Creo que habría que reparar bastante ese código.
pero funca!

si me dices en "que", te lo agradecería, además la pagina esta llena de preguntas y nadie se da el tiempo de dar una solución... en wena sipo XD
lordmaelwys está desconectado   Responder Citando
Antiguo 04-mar-2008, 06:56   #5 (permalink)
GreenEyed tiene algunos puntos positivos de karma
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.487
Re: (2) Listados desplegadles (o combos) dependientes (SOLUCION) JSP+AJAX

"Funca" debe ser una definición moderna , por que mi definición de "funciona" es algo más estricta .

Algunos detalles echando un vistazo rápido:
.- La conexión la guardas en una variable estatica, por tanto compartida y si tienes más de un acceso concurrente -> pum.
.- Al usar el objeto que devuelve la conexion no haces ningun tipo de comprobacion si se pudo obtener la conexion o no, asi que si hay algun problema -> NullPointerException.
.- El HTML que crea el SELECT, por ejemplo, no está bien formado ya que el orden de abrir y cerrar tags no es el correcto. En un navegador estricto con los estandares, no funcionará.
.- Cada vez abres y cierras una conexion a la BDD, lo cual es totalmente ineficiente. No grave pero muy ineficiente y con algo de trafico, puedes matar la BDD.
.- El codigo de acceso a la BDD y devolver la conexion no hace las salvaguardas necesarias, asi que en caso de error no se cierran las conexiones, sumale eso a que abres cada vez una nueva y como haya un problema, la BDD es candidata segura a defuncion.

Sin entrar en detalles estilisticos tipo que mezclar HTML/JavaScript con acceso a la BDD hace que el codigo sea menos legible y reutilizable.

De todas formas, no te lo tomes a mal. Haciendo cosas es como se aprende. Lo que ocurre es que hay una diferencia entre que un codigo te funcione en una prueba y que un codigo lo pueda utilizar cualquiera y le sirva a la gente como base para aprender.

S!
__________________
TAANSTAFL - Para obtener respuestas inteligentes, lo mejor es empezar por preguntar de forma inteligente.
GreenEyed está desconectado   Responder Citando
Antiguo 04-mar-2008, 07:04   #6 (permalink)
lordmaelwys ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2007
Mensajes: 32
Re: (2) Listados desplegadles (o combos) dependientes (SOLUCION) JSP+AJAX

gracias por lo anterior, lo tomare en cuenta, pero esto:

Cita:
Iniciado por GreenEyed Ver Mensaje
"Funca" debe ser una definición moderna
no seamos tan puritanos, no creo que seas un "viejo vinagre", pero por ak es de lo mas normal.

muchas gracias por todo GreenEyed, de verdad lo aprecio, saludos.
lordmaelwys está desconectado   Responder Citando
Antiguo 04-mar-2008, 09:10   #7 (permalink)
GreenEyed tiene algunos puntos positivos de karma
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.487
Re: (2) Listados desplegadles (o combos) dependientes (SOLUCION) JSP+AJAX

Era un chiste simplemente, para quitarle hierro al asunto . Afortunadamente la programación se me da mejor que contar chistes, jejeje.
__________________
TAANSTAFL - Para obtener respuestas inteligentes, lo mejor es empezar por preguntar de forma inteligente.
GreenEyed está desconectado   Responder Citando
Antiguo 13-mar-2008, 06:51   #8 (permalink)
pitre ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2008
Mensajes: 2
Re: (2) Listados desplegadles (o combos) dependientes (SOLUCION) JSP+AJAX

Totalmente de acuerdo con GreenEyed, de hecho podemos ser albañiles (sin menospreciar), pero nuestro objetivo es la arquitectura (del software). El Modelo 1 de JSP hace 10 años que se ha superado. Por favor MVC!!!

un saludo, y sin acritud.
pitre está desconectado   Responder Citando
Respuesta
Calificación: Calificación de Tema: 2 votos, 5,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Desactivado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 06:10.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93