Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    1

    Problemi select/jsp/javascript/mysql

    Salve a tutti inanzitutto mi scuso se posto una cosa che c'è già in giro nel forum...nel senso purtroppo dopo aver cercato tanto...non ho trovato abbastanza esaustive le risposte al mio problema.
    Sto cercando di creare due select (html) che in pratica selezionando un campo all'interno della prima lui mi manda l'input per vedere popolata la seconda select.Ho provato a seguire diverse soluzioni tra cui anche quello con l'utilizzo del codice javascript...ma per qualche motivo non mi funge...e siccome sono alle prime armi volevo sapere se qualcuno con l'occhio piu aguzzo di me poteva spiegarmi il motivo...
    questo è il codice :

    codice:
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@page import="ciaociao.DBconnect1"%>
    <%@page import="java.sql.ResultSet"%>
    <%@page import="java.sql.Statement"%>
    <%@page import="java.sql.DriverManager"%>
    <%@page import="java.sql.Connection"%>
    
    <!DOCTYPE html>
     
    
    <script type="text/javascript">
    
         
    <%
       DBconnect1 connAlb0 = new DBconnect1();
       Connection conn = connAlb0.getConnection();
       Statement st4 = conn.createStatement();
       String  sql = "SELECT C.cognome, C.nome FROM partito AS P, candidato AS C "
                                   + "WHERE P.idPartito=C.partitodiappartenenza and P.nome= 'partito albo' ";
        ResultSet rs2= st4.executeQuery(sql);
        while(rs2.next()){ 
        }   
        st4.close();
           
        %>   
        function setCandidato(chooser){
        var newElem;
        var where = (navigator.appName = "Microsoft Internet Explorer") ? -1 : null;
        var candidChooser = chooser.form.elements["candidato"];
        while (candidChooser.options.length) {
            candidChooser.remove(0);
        }
    
            var choice = chooser.options[chooser.selectedIndex].value;
        var db = rs2[choice];
        newElem = document.createElement("option");
        newElem.text = "seleziona un candidato:";
        newElem.value = "";
        candidChooser.add(newElem, where);
        if (choice != "") {
            for (var i = 0; i < db.length; i++) {
                newElem = document.createElement("option");
                newElem.text = db[i].text;
                newElem.value = db[i].value;
                candidChooser.add(newElem, where);
            }
        }
    }
    </script>
    
    <%
    Connection conn2 = connAlb0.getConnection();
    Statement st5 = conn.createStatement();
    String  sql2="Select IdPartito,nome from partito";
    ResultSet rs= st5.executeQuery (sql2);  
    %>
    <form name="candidato">
        <label>
    <select name="partito" size="5"  multiple="multiple" onchange="setCandidato(this)" style="position:absolute;width: 22%; top: 60%;right: 75%;" > 
       <% while(rs.next()){ %>
          <option value="" selected="selected" ><%=rs.getString(2)%></option>
    <% 
    }   
    st5.close();%>
                                                                                                                   </select>  
    </label> 
          </form>
            <form>           
        <select name="candidato" size="5"  multiple="multiple" style="position: absolute; right: 50%; width: 22%;top: 60%">  
              <option value="" selected="selected">seleziona un candidato </option>       
                                                              </select>  
                                                                      </form>

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Non ho letto tutto il tuo codice, ma mi pare evidente che non ti è chiara una cosa essenziale: il codice Java (quello all'interno dei tag <% e %>) viene eseguito nel server solo al momento di servire una richiesta. Il codice JavaScript, invece, è eseguito lato client (dal browser), DOPO che il server ha già fatto tutto e la risposta è stata inviata al client.

    La pagina HTML risultante, quindi, non vede i RecordSet (non sa nemmeno che esistono e non possono essere invocati/usati, di conseguenza). Quindi, per prima cosa, questa riga di codice JavaScript non funzionerà mai (oltre al fatto di non avere alcun senso):

    codice:
    var db = rs2[choice];

    Perchè "rs2", lato client, non esiste (inoltre, rs2 è nu RecordSet non un array, quindi non lo si può usare in quel modo nemmeno lato server). Prova a guardare il sorgente della pagina HTML che ti viene restituita sul browser... quello è tutto ciò con cui JavaScript può lavorare... niente di più.


    Per fare quello che chiedi hai 3 opzioni:

    1) Ad ogni selezione dela select, devi effettuare una richiesta al server (quindi, ad esempio, devi fare il submit di un form), in modo che il server possa ricevere come parametro la selezione, possa quindi fare la query sul DB e possa popolare la pagina HTML con i risultati

    2) Usare Ajax per effettuare richieste asincrone al server... che farà la stessa cosa del punto precedente, solo che poi devi recuperare la response ajax e andare a modificare il DOM della pagina HTML

    3) "Simulare" tramite JavaScript il lavoro della query del server: il server dovrebbe fare una query in cui recupera TUTTO. Poi, tramite JavaScript mostri solo il necessario.


    Non è facile implementare gli ultimi 2 punti (che, comunque, richiedono tanto lavoro lato JavaScript, che non è trattato qui). E' già più facile la prima, con la quale ti suggerisco di cimentarti prima di passare a soluzioni più avanzate, come la seconda.


    Ciao.
    Ultima modifica di LeleFT; 22-05-2014 a 13:16

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.