Salve a tutti.
Sono inesperto di java, quindi kiedo il vostro aiuto.
Devo passare due array di stringhe da una servlet ad una pagina jsp; nella servlet eseguo le due query per riempire i due array, i cui contenuti devo visualizzarli in una tabella nella pagina jsp. Per ogni valore dell'indice dei due array, sarà inserita una nuova riga nella tabella contente i due risultati dei due array. Però nn funziona.
Ecco il codice:
Servlet (VisualizzaTuttiCv.java)
codice:
public class VisualizzaTuttiCV extends HttpServlet {
String Url = "jdbc:mysql://localhost:3306/gestionedati";
String ex="vuoto"; //questa variabile sarà modificata se viene lanciata qualche eccezione
String UsernameDB ="root";
String PasswordDB ="bari";
int i=0;
int cont=0;
int NumeroUser;
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
String ID = (String)session.getAttribute("login");
try {
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e) {
System.out.println("Error loading driver");
}
catch (Exception e) {
e.printStackTrace();
ex = e.toString();
}
try {
java.sql.Connection conn = DriverManager.getConnection(Url, UsernameDB, PasswordDB);
java.sql.Statement st3 = conn.createStatement();
ResultSet risultato3=st3.executeQuery("SELECT Count(IdUtente) AS i FROM utente WHERE IdUtente != '1'");
if (risultato3.next()) {
i = risultato3.getInt("i");
}
/*request.setInt("i",i);*/ //questo nn funziona...
String Id[] = new String[i];
String User[] = new String[i];
java.sql.Statement st1 = conn.createStatement();
System.out.println("--------VISUALIZZAZIONE DI TUTTI I CV-----------");
String querySQL = "SELECT IdUtente FROM utente WHERE IdUtente != '1'";
ResultSet risultato1=st1.executeQuery(querySQL);
if (risultato1 != null){
while (risultato1.next()) {
Id[cont] = risultato1.getString("IdUtente");
request.setAttribute("Id[cont]", Id[cont]);
java.sql.Statement st2 = conn.createStatement();
String querySQL2 = "SELECT UserName FROM utente WHERE IdUtente = '"+Id[cont]+"'";
ResultSet risultato2=st2.executeQuery(querySQL2);
risultato2.next();
User[cont] = risultato2.getString("UserName");
request.setAttribute("User[cont]", User[cont]);
System.out.println("Numero id "+Id[cont]);
System.out.println("User "+User[cont]);
System.out.println("indice array = "+cont);
cont=cont+1;
}
System.out.println("Numero di utenti trovati = " +cont);
System.out.println("Numero di utenti trovati = " +i);
String jspPage = "/VisualizzaAdmin.jsp";
request.getRequestDispatcher(jspPage).forward(request,response);
}
else {
String jspPage = "/NoCVTrovati.jsp";
request.getRequestDispatcher(jspPage).forward(request,response);
}
}
catch( SQLException e ) {
e.printStackTrace();
ex = e.toString();
}
if (ex == "vuoto") {
System.out.println("Visualizzazione tutti i CV terminata");
}
else {
System.out.println("Visualizzazione tutti i CV non effettuata");
System.out.println("eccezione: "+ex);
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println("Visualizzazione non effettuata
Ritorna alla <a href=\"../../ejob/BenvenutoAdmin.html\">Home Page</a></p>");
pw.close();
}
}
}
In pratica, prima faccio una query per trovare la lunghezza degli array (i), poi faccio le due query per riempire i due array ke devo passare (Id[] e User[] ). Poi setto gli attributi (setAttribute). Gli array vengono effettivamente riempiti, infatti i vari out.println mi danno i risultati corretti.
Il problema è nella pagina jsp.
PAGINA JSP (VisualizzaAdmin.jsp)
codice:
<html>
<head>
<title>Visualizzazione di tutti gli utenti registrati</title>
</head>
<body background="/ejob/images/prato.gif">
<table bgcolor="white" border="2" cellpadding="10" align="center" width="500">
<caption>
Ecco tutti gli utenti registrati
</caption>
<tr><td><p align="center"> Id Utente </p></TD> <TD><p align="center"> Username </p></td></tr>
<%for (int j=0; j<4; j=j+1) {%>
<%out.print("<tr><td><p align=center>");%>
<%out.print(request.getAttribute("Id[j]").toString());%>
<%out.print("</td></p><td><p align=center>");%>
<%out.print(request.getAttribute("User[j]").toString());%>
<%out.print("</td></p></tr>");
}%>
%>
</table>
<a href="../../ejob/BenvenutoAdmin.html">Home
</body>
</html>
Ho messo nel cilo for j<4 perkè ho riempito il mio database mysql in modo tale ke gli array avessero lunghezza 4; infatti, altro problema, nn riesco a passare la lunghezza dei due array alla pagina jsp (forse è questa la causa dell'errore? devo fare setInt nella servlet e poi getInt nella jsp?).
L'errore ke mi dà il server tomcat è NullPointerExeption.
Spero di essere stato kiaro.