PDA

View Full Version : [Java] problema servlet e jsp


therealduke
11-02-2011, 23:16
salve a tutti, sto facendo un sito in cui gli utenti si distinguono tra docenti e studenti; i docenti possono assegnare dei voti agli studenti iscritti ai relativi esami. Il mio problema è questo: quando il docente vuole assegnare un voto seleziona la matricola, la materia, inserisce data e voto; la servlet che riceve i dati fa un controllo sulla data passata e quella presente nel db, se corrisponde fa la insert nel db nella tabella votazioni e fin qui tutto ok. Il problema è che nn so come fare in caso nn corrisponda la data perchè vorrei che la servlet inviasse alla jsp un messaggio di errore ma al momento ricarica solo la pagina senza avvertire che i dati nn sono stati inseriti. Come faccio se possibile a far visualizzare il messaggio?

ecco il metodo della servlet
public void Votazione(HttpServletRequest request){
String studente_iscritto=request.getParameter("studente_iscritto");
String appelli_fissati=request.getParameter("appelli_fissati");
String giorno=request.getParameter("giorno");
String mese=request.getParameter("mese");
String data_controllo=request.getParameter("data");
String votazione=request.getParameter("votazione");
int voto=Integer.parseInt(votazione);
String concat=(giorno+"/"+mese);
try{
Connection c=DriverManager.getConnection(url, user, pwd);
Statement st=c.createStatement();
if(data_controllo.equals(concat)){
st.executeUpdate("INSERT INTO VOTAZIONI(MATR_STUDENTE, NOME_CORSO, VOTAZIONE, DATA) VALUES('"+studente_iscritto+"', '"+appelli_fissati+"', "+voto+", '"+giorno+"/"+mese+"')");
}
st.close();
c.close();
}catch (SQLException e){e.printStackTrace();} }

il metodo è richiamato in questo modo:
if(votazione!=null){
Votazione(request);
RequestDispatcher rd=getServletContext().getRequestDispatcher("/iscrizioni_doc.jsp"); rd.forward(request, response); }

PGI-Bis
12-02-2011, 14:13
Premetto che mi intendo di javaee quanto di coltivazione di palme ma, incuriosito, ho fatto una prova. Riepilogo per vedere se parliamo della stessa cosa:

ho una pagina jsp che contiene un form che invia dei dati ad una servlet. In verità non cambia nulla se chi manda è una servlet e chi riceve una jsp o se sono tutte e due pagine jsp o servlet ma non è un problema.

L'utente immette dei dati, preme invio e si aspetta che il risultato dell'invio (tutto ok, manca qualche pezzo, c'è stato un errore) appaia nella stessa pagina del form, in modo tale da poter procedere con gli inserimenti o eventualmente correggere i dati inseriti.

Non so se sia bene o male ma salta fuori che si possa fare così.

La pagina del form include un messaggio condizionato dall'esistenza di un attributo di sessione, chiamiamolo "error". Dopo aver disegnato il form, se c'è questo "error" e il suo valore non è vuoto allora la jsp lo stampa. Nell'esperimento che ho fatto ho usato un bean ma era per sfizio:

...omissis
</form>
<%
servlettest.StoreError error = (servlettest.StoreError) session.getAttribute("error");
if(error != null) {
if(error.hasErrorMessage()) {
out.println("errore " + error.getErrorMessage());
} else {
out.println("Dati salvati.");
}
session.removeAttribute("error");
}
%>
</body>
</html>

Lato servlet, fai quel che devi fare con il dato creato dal form e usi "error" per far sì che la pagina jsp di partenza capisca se qualcosa è andato storto e per mostrare il messaggio di errore sotto al form.

Sempre nella prova che ho fatto, la servlet lo fa dicendo:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession(true);
TestEntry entry = new TestEntry().init(request.getParameterMap());
StoreError error = new StoreError();
String status = entry.getStatus();
error.setErrorMessage(status);
session.setAttribute("error", error);
response.sendRedirect("/webtest");
}

Ripeto, non so se sia tipico o addirittura consigliabile fare come dico - io non so alcunchè di programmazione web - ma sembra funzionare.