E come faccio a prendere il parametro dal db?
E come faccio a prendere il parametro dal db?
Estratto del tuo form:
Estratto del codice che manipola la richiesta:codice:<form action="inserimento2.jsp" name="modulo" onsubmit="return calcolodata();"> <table> <tr><td>Data iniziale</td><td>Data finale</td><td>Numero di giorni</td></tr> <tr> <td><input type="text" name="datai" size="10" value="gg/mm/aaaa"></input></td> <td><input type="text" name="dataf" size="10" value="gg/mm/aaaa"></input></td> <td align="center"><input type="text" name="numg" size="4" maxlength="4" value=""></input></td></tr> <tr><td colspan="3" align="center"> <input type="submit" name="Prenota" ></input> </td></tr> </table> </form>
E' evidente che non passi alcuni campi alla pagina, con il risultato di avere null exceptions nei metodi di parsing.codice:int idauto=Integer.parseInt(request.getParameter("idauto")); String mia=request.getParameter("datainserita"); String mia2=request.getParameter("datainserita"); int prezz=Integer.parseInt(request.getParameter("prezzo")); int numgg=Integer.parseInt(request.getParameter("numg"));
Già che ci siamo:
Questo modo di convertire le date non è il massimo, è meglio passare la data ad un oggetto di SimpleDateFormat opportunamente configurato in modo da vedersi restituita una Util.Date dal metodo parse. Dovresti ad ogni modo usare dei blocchi try catch per catturare qualsiasi errore di parsing.codice:String g=mia.substring(0,2); String m=mia.substring(3,5); String a=mia.substring(6,10); String g2=mia2.substring(0,2); String m2=mia2.substring(3,5); String a2=mia2.substring(6,10); String data=a+"-"+m+"-"+g; String data2=a2+"-"+m2+"-"+g2;
E infine:
Questo modo di compilare le query statements è sconsigliato, inefficiente e professionalmente parlando per me è un errore. Usa le query parametriche.codice:ResultSet rs = st.executeQuery("Select * from prenotare where datai>='"+data+"' and datai<='"+data2+"'dataf<='"+data+"' and dataf>='"+data2+"' "); if(rs.next()){ int rs1 = st.executeUpdate("INSERT INTO prenotare(ceauto,datai,dataf,totale,numg)" + " VALUES('"+idauto+"','"+data+"','"+data2+"','"+totale+"','"+numgg+"')" ); }
...
E ma siccome è un lavoro di scuola non posso cambiare metodi...ma comunque ho verificato che non passa nemmeno gli altri parametri!...per esempio il prezzo non viene passato non capisco perché!..come si fa a passare dei parametri contenuti in un input type di una pagina jsp in un altra jsp?....
![]()
Scusate il doppi post volevo dire input type Hidden di una pag jsp!![]()
Originariamente inviato da kakarof
E ma siccome è un lavoro di scuola non posso usare metodi non insegnati...prendetevela con i prof...
![]()
Uh, non dirmi che quelle variabili ti arrivano da una pagina diversa da quella del form?ma comunque ho verificato che non passa nemmeno gli altri parametri!...per esempio il prezzo non viene passato non capisco perché!..come si fa a passare dei parametri contenuti di un input type Hidden di una pagina jsp in un altra jsp?....![]()
![]()
I form hanno lo scope della richiesta, una volta che la pagina di risposta è completata la richiesta viene pulita e perdi tutte le variabili che avevi. Per utilizzare i dati inseriti in un form anche in altre pagine hai solo due possibilità
1- ripeti i tag input hidden in tutte le pagine fino a quando non arrivano alla pagina che li deve gestire, pessima soluzione ma l'unica percorribile se non vi hanno ancora spiegato la classe Session;
2- salvi i dati in questione in Session.
...
è avevo trovato con le session su internet però non ero riuscito c*****....come sarebbe la sintassi giusta per le session??
P.S: Scusa se rompo tanto ma sono ancora a livelli base proprio![]()
si usa esattamente come request ossia:
La differenza è che i parametri non vengono scritti dal form, li devi scrivere tu a mano la prima volta che li hai a disposizione.codice:// per scrivere session.setAttribute("nome_attributo", valore); // per leggere session.getAttribute("nome_attributo");
...
ok semplice..... ma però se io stampo le auto dal db (come nel code sotto), quante session scrivo?? tante session quante sono le auto??
![]()
codice:while (rs.next()){ out.println("<th>"); out.println("<tr>"); out.println("<td>"); out.println("<form action=prenota.jsp name=acquista method=post>"); out.println("[img]"+rs.getString("foto")+"[/img]"); out.println("<input type=hidden name=idautox value="+rs.getString("foto")+">"); out.println("</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>"); out.println(rs.getInt("idauto")); out.println("<input type=hidden name=idautox value="+rs.getInt("idauto")+">"); out.println("</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>"); out.println(rs.getString("marca")); out.println("</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>"); out.println(rs.getString("modello")); out.println("<input type=hidden name=mod value="+rs.getString("modello")+">"); out.println("</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>"); out.println(rs.getString("optional1")); out.println("<input type=hidden name=opt1 value="+rs.getString("optional1")+">"); out.println("</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>"); out.println(rs.getString("optional2")); out.println("<input type=hidden name=opt2 value="+rs.getString("optional2")+">"); out.println("</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>"); out.println(rs.getString("optional3")); out.println("<input type=hidden name=opt3 value="+rs.getString("optional3")+">"); out.println("</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>"); out.println(rs.getString("prezzo")); out.println("<input type=hidden name=prezzo value="+rs.getString("prezzo")+">"); out.println("</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>"); out.println("<input type=submit name=acquista value='prenota'>"); out.println("</td>"); out.println("</tr>"); out.println("</form>"); }
Quello che tu stai cercando di realizzare è una sorta di wizard, un insieme di pagine che in base alla scelte fatte nelle pagine precedenti portano ad un risultato finale (la prenotazione dell'auto).
Normalmente la request è l'oggetto ideale per gestire lo scambio di informazioni, carica i dati dal form e dopo averli passati alla jsp li cancella, mantenendo il consumo delle risorse come la memoria sotto controllo.
Il wizard è un caso particolare perché le scelte fatte e i dati inseriti nella prima pagina devono essere disponibili fino a quando il processo non è andato a buon fine.
Pertanto man mano che l'utente effettua le sue scelte e avanza tra le pagine tu dovrai salvarti i dati dei form precedenti fino a quando arrivi all'ultima jsp, la quale dovrà liberare il tutto.
Per fare questo, come ti dicevo prima, potresti man mano inserire i dati compilati nei precedenti form in input type hidden nel form della pagina successiva, questo modo di procedere si chiama "forwarding" ed era la norma prima che venisse introdotta la session.
Questo approccio ha il vantaggio che se l'utente dovesse decidere di abortire la procedura, andando per esempio a navigare su una pagina diversa, tutti i dati verrebbero automaticamente puliti. Lo svantaggio è che se ti dimentichi di fare il forwarding di un parametro potresti trovarti con delle pagine inconsistenti.
La session ha il vantaggio di caricare in memoria in modo persistente dei dati, ideale per esempio per mantenere un carrello o le credenziali dell'utente. Lo svantaggio è che maggiore è la mole dei dati che carichi in sessione, maggiore sarà il consumo di risorse da parte del server. Per questo quando si usa la sessione bisogna studiare bene quando caricare i dati e soprattutto gestirne lo scarico (tramite session.removeParameter("nome_parametro")quando non ce n'è più bisogno. Tieni presente che l'utente potrebbe decidere di tornare alla home page nel mezzo della procedura, lasciandoti in sessione un sacco di dati che non servono più. Starebbe a te gestire questi casi.
Per il tuo esercizio ti consiglio di usare il forwarding, sono ben pochi i dati che ti devi portare avanti nelle pagine e le pagine stesse sono poche.
codice:String idauto = request("idauto"); ... out.println("<input type='hidden' value='" + idauto +"'>");
...