Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    0

    checkbox, recuperare i valori con Java

    Ciao, volevo avere una piccola informazione.
    Avete presente la posta privata (email) ? Permette la selezione di più messaggi da poter cancellare in una volta. Io dovrei fare una cosa del genere.

    Il mio dubbio è questo. Supponiamo che dal database recuperi 5 record, ogni record ha una checkbox, e ogni record che seleziono, dovrà essere inserito in un'altra tabella. La mia domanda è questa, come faccio a recuperare i valori e sapere quali record sono selezionati? Insomma mi basterà dare un valore alla check, per poi recuperarlo attraverso il getParameter nella servlet ? O sarò costretto ad utilizzare una funzione javascript ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    si usa
    codice:
    request.getParameterValues("nome_array");
    dove per nome_array è il valore del attributo name comune a tutti gli elementi che vuoi raggruppare e recupeare (tipicamente saranno checkbox, ma potrebbero essere benissimo textfields e quant'altro).

    Un esempio pratico:
    codice:
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <form name="myform" action="multipleParams.jsp" method="post">
                <% for(int i = 1; i <= 10; i++) { %>
                <input type="checkbox" name="idrecord[]" value="<% out.print(i); %>" /> Valore: <% out.print(i); %>
                
                <% } %>
                <input type="submit" value="submit" />
            </form>
            <%
            String[] idrecord = request.getParameterValues("idrecord[]");
            if (idrecord != null) {
                out.println("<h2>Valori inviati</h2>");
                for (int i = 0; i < idrecord.length; i++) {
                    out.println("#"+i+": "+idrecord[i]+"
    ");
                }
            }
            else {
                out.println("<h2>Form non ancora inviato o nessun valore selezionato.</h2>");
            }
            %>
        </body>
    </html>
    Ti faccio notare che mi sono attenuto ad una "vecchia" raccomandazione (X)HTML per quanto riguarda l'attributo "name" di signori da raggruppare, ovvero di specificarli includendo le parentesi quadre nel nome (come fosse un array). Per JSP ciò è irrilevante, ma per javascript fa la differenza... se non dovessi aver necessità di fare controlli a livello javascript (tipicamente prima di inviare il form) puoi omettere le parentesi quadre (anche dove recuperi in request), ed il codice diventerebbe qualcosa del genere:
    codice:
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <form name="myform" action="multipleParams.jsp" method="post">
                <% for(int i = 1; i <= 10; i++) { %>
                <input type="checkbox" name="idrecord" value="<% out.print(i); %>" /> Valore: <% out.print(i); %>
    
                <% } %>
                <input type="submit" value="submit" />
            </form>
            <%
            String[] idrecord = request.getParameterValues("idrecord");
            if (idrecord != null) {
                out.println("<h2>Valori inviati</h2>");
                for (int i = 0; i < idrecord.length; i++) {
                    out.println("#"+i+": "+idrecord[i]+"
    ");
                }
            }
            else {
                out.println("<h2>Form non ancora inviato o nessun valore selezionato.</h2>");
            }
            %>
        </body>
    </html>
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    scusate, ho perso la password del vecchio nickname.
    Cmq se volessi invece far tornare i valori con la checkbox selezionata?Insomma da dove capisco se una checkbox è selezionata o meno? Dal valore On , Off?

  4. #4
    Cioè mi spiego meglio. Se seleziono ok riesco a recuperare i valori...però io devo fare in modo di restituire anche i valori selezionati. A quanto ho capito riesco a capire se un valore è selezionato o meno attraverso la parola:

    checked

    Ma non c'è un modo per recuperare tutti i valori , sia selezionati o no, e poi in una servlet capire i valori selezionati x fare una cosa e i valori non selezionati per fare un'altra cosa...

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Bene! Adesso con quel nickname faremo un bel casino qui sul forum

    Le checkbox per loro stessa natura sono fatte in modo di passare il valore solo se selezionate. Se ti serve un comportamento diverso, usa un componente diverso (per esempio una coppia di radiobuttons in cui uno sia sempre selezionato di default). Oppure dovrai lavorare via javascript sull'evento onsubmit del form, e ciclare sull'array di checkbox (ecco il motivo di quella mia precisazione nel post precedente) per salvare a parte (compilando un campo hidden ad esempio) i valori delle checkbox non selezionate.

    Quest'ultima possibiità, oltre che inutilmente complicata, non garantisce da comportamenti inaspettati, visto che un visitatore potrebbe benissimo non abilitare javascript nel proprio browser, vanificando qualsiasi forma di controllo pre-submit.

    In altre parole, dovrai tenere traccia delle checkbox selezionate e comportarti di conseguenza. Riprendendo l'esempio di codice precedente:
    codice:
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@page import="java.util.*;" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
    <%
      String[] idrecord = request.getParameterValues("idrecord[]");
      List l = (idrecord != null ? Arrays.asList(idrecord) : null);
    %>
            <form name="myform" action="multipleParams.jsp" method="post">
                <% for(int i = 1; i <= 10; i++) { %>
                <input type="checkbox" name="idrecord[]" value="<% out.print(i); %>" <% out.print(l != null ? (l.contains(Integer.toString(i)) ? "checked" : "") : ""); %> /> Valore: <% out.print(i); %>
    
                <% } %>
                <input type="submit" value="submit" />
            </form>
            <%        
            if (idrecord != null) {
                out.println("<h2>Valori inviati</h2>");
                for (int i = 0; i < idrecord.length; i++) {
                    out.println("#"+i+": "+idrecord[i]+"
    ");
                }
            }
            else {
                out.println("<h2>Form non ancora inviato o nessun valore selezionato.</h2>");
            }
            %>
        </body>
    </html>
    Con le uniche complicazioni che vado a definirmi l'array con i valori delle checkbox selezionate all'inizio. La List è solo per pigrizia (visto che fornisce un comodo metodo contains). Il controllo nel ciclo for è banale: se l (List) non esiste (ovvero è null), non devo stampare niente. Se esiste invece controllo se contiene l'elemento che stiamo correlando con quella specifica checkbox: se tale elemento è presente nella list, allora stampo "checked".
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Hmm, si lo so che dovrebbero servire solo per recuperare i valori selezionati, ma ho bisogno di prendere anche quelli non selezionati , insomma devo x forza recuperare tutti i valori...ma non ho ben capito come devo fareO_O...

  7. #7
    Il discorso è semplice: tu hai un array di stringhe che contiene i value dei check selezionati. Se tu conosci tutto l'insieme dei valori di ogni check sai sia quelli selezionati che non.

    Nell'esempio proposto da Andrea1979 questo elenco tu lo sai perché i checkbox hanno come value il valore di iterazione del ciclo for che va da 1 a 10.
    I check non selezionati saranno quindi quei valori da 1 a 10 che non troverai nell'array idrecord.
    "Na' sedia te vojo tirà!"

  8. #8
    SI ma così' dovrei farmi tornare tutti i record presenti nel db, e vedere quali sono presenti e quali non sono presenti:P

  9. #9
    Bè, se devi elencare una serie di checkbox relativi a dei record persistenti penso che almeno l'id di questi record te lo devi selezionare.
    Questi id saranno poi i value dei checkbox.
    "Na' sedia te vojo tirà!"

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326

    Moderazione

    @Andrea1979_ : i miei complimenti per la scelta oculata del secondo nik...

    A parte il fatto che se non ti ricordi la password è sufficiente cliccare sul Link del Regolamento per sapere come riottenerla. In alternativa devi contattare la redazione, che penserà a sistemare le cose e non creare un nuovo profilo, che va contro il regolamento generale del forum.

    Dal regolamento generale
    È severamente vietato avere più di un account attivo nel forum. Ogni profilo aggiuntivo verrà cancellato senza preavviso.
    Ho già avvisato gli amministratori, che ti contatteranno per sistemare questo macello.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.