Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Problema con form e jsp

    Buonasera a tutti. Sto lavorando su una web application in jsp e java che si occupa di comodato d'uso e assistenza di macchinari e quindi che si interfaccia su un database. Ho creato una pagina jsp che richiama dal database i macchinari disponibili ad un possibile comodato d'uso e li ho inseriti all'interno di un form nel seguente modo:

    <%
    ArrayList<Macchinari> macc=new ArrayList<Macchinari>();
    String query="SELECT * FROM coffee.macchinari WHERE macchinari.Tipo_macchinario='Comodato Uso' and macchinari.stato='0'";
    macc=OperazioniDB.Visualizza_Macchinari(query);
    if(macc.size()>0){
    %>
    <br/>
    <form action="scelta_macchina.jsp" method="post">
    <h1><legend>Macchine disponibili:</legend></h1>
    <%
    for(Macchinari m: macc){
    %>

    <input name="selezione" type="radio" value> <%=m.getDescrizione()+ ": " + m.getModello() + " " +m.getSN()%>
    <br/>
    <%
    }
    %>


    <input type="submit" value="Seleziona" >
    </form>
    <%
    }
    else
    out.println("Mi dispiace, al momento non abbiamo macchinari disponibili");


    %>


    e fin qui tutto bene. Nel momento che seleziono una macchina ed entro nella pagina scelta_macchina.jsp però non riesco a recuperare in nessun modo i dati della macchina (Modello, Descrizione e Serial_Number ). Ho provato a usare i bean, con getParameter e anche attraverso qualcosa con i cookie ma evidentemente sbaglio qualcosa. Voi sapete come prelevare questi dati? Spero di essere stata chiara, grazie mille.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Cristina12 Visualizza il messaggio
    e fin qui tutto bene.
    Più o meno ... nel senso che mettere scriptlet Java (tutto il codice Java tra <% %> o <%= %> ) nelle pagine JSP è un approccio non buono e parecchio "sporco". Non so se sai/puoi usare alternative. Comunque trascuriamo per il momento, non è questa la questione rilevante.

    Quote Originariamente inviata da Cristina12 Visualizza il messaggio
    Nel momento che seleziono una macchina ed entro nella pagina scelta_macchina.jsp però non riesco a recuperare in nessun modo i dati della macchina
    Alt, innanzitutto l'utente vede tanti radio-button che hai generato nella pagina. L'utente vede la descrizione che hai emesso tu in output (quel <%=m.getDescrizione()+ ..... ) ma quando l'utente invia il form, quello che viene inviato come parametro è il value del button selezionato.

    Ma nel codice vedo

    .... type="radio" value> <%= ....

    Ovvero NON hai messo alcun value specifico. Ciascun radio dovrebbe avere un suo value, tipicamente può essere un ID o Code univoco di quella certa entità (es. il macchinario).

    Quello che dovrebbe essere generato e inviato al client dovrebbe risultare qualcosa del tipo es.:

    <input name="selezione" type="radio" value="100"> Macchinario ZZZ<br/>
    <input name="selezione" type="radio" value="101"> Macchinario XXX<br/>
    <input name="selezione" type="radio" value="102"> Macchinario YYY<br/>

    Insomma, un value univoco per ciascun radio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Intanto ti ringrazio e se hai suggerimenti da darmi io sono pronta ad accoglierli. Come dicevo, ci lavoro da poco tempo.

    Non so come dare un value univoco ad ogni macchinario essendo che non so a priori quale sia il numero totale di macchinari che mi restituirà la query. Mi viene in mente solo di fare un altro ciclo for che mi conti quante macchine restituisce la query e poi creare automaticamente un numero che sia il value di ogni macchina. Conosci altre soluzioni tu? L'ideale sarebbe dare come value l'id del macchinario che esce dalla query.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Cristina12 Visualizza il messaggio
    se hai suggerimenti da darmi io sono pronta ad accoglierli.
    Se stai facendo una webapp che usa solo lo strato di Servlet/JSP, cioè non usi e non intendi usare framework di più alto livello (es. Struts, Spring, Stripes, ecc..) allora generalmente il minimo che si può fare per rendere la cosa un minimo "pulita" è la seguente:
    - le Servlet ricevono le request, eseguono validazioni, query su db e quant'altro, poi fanno un "forward" interno ad una pagina JSP.
    - le JSP fanno solo da "vista", presentano solo i dati sfruttando tipicamente dei custom tag come quelli di JSTL (e niente codice Java).

    Se tutto questo non ti è chiaro, potrai (e forse dovrai prima o poi) affrontarlo più avanti.

    Quote Originariamente inviata da Cristina12 Visualizza il messaggio
    Non so come dare un value univoco ad ogni macchinario
    Ma la tua tabella su DB avrà pur una chiave primaria .. no? Tipicamente è un campo numerico auto-incrementante (o da una sequence, a seconda del DBMS).
    Bene, la chiave primaria serve proprio anche in questi casi, cioè per identificare univocamente un record passando il suo Id in una request dal client.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Il punto è proprio questo. Forse non sono stata chiara io, vorrei passare proprio la chiave primaria dei macchinari per identificare il record. E il modo è stato:

    <input name="macchina" type="radio" value> <%=m.getSN()%>

    E' corretto?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Cristina12 Visualizza il messaggio
    vorrei passare proprio la chiave primaria dei macchinari per identificare il record. E il modo è stato:

    <input name="macchina" type="radio" value> <%=m.getSN()%>

    E' corretto?
    No. Allora: innanzitutto la classe che modella il macchinario dovrà avere chiaramente tutti i campi necessari, id, descrizione ecc... (con i rispettivi metodi accessori getId/setId, getDescrizione/setDescrizione, ecc...).
    Poi quando fai la query chiaramente dovrai "tirar su" dai record anche il id e metterlo negli oggetti.

    A quel punto ogni volta che generi un radio-button farai:

    <input name="selezione" type="radio" value="<%=m.getId()%>"> <%=m.getDescrizione() ........... %>

    Nota la parte in viola, essa ti permette di emettere in output il id, che diventa il valore dell'attributo value.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Si, chiaramente la mia classe Macchinari.java contiene tutti i metodi set/get dei vari campi.
    Inoltre il metodo Visualizza_Macchinari della classe OperazioniDB mi restituisce un ArrayList con tutti i dati di ogni singolo macchinario.
    Ho capito il mio errore. Io inserivo
    <input name="selezione" type="radio" value> <%=m.getDescrizione()+ ": " + m.getModello() + " " +m.getSN()%>
    e invece nel value dovevo solo inserire il singolo
    value="<%=m.getSN()%>">

    Grazie mille per l'aiuto. Adesso spero di migliorare anche nel resto della programmazione

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.