PDA

View Full Version : [JSP] Problema di conversione dei tipi usando DBTAGS :(


Matrixbob
09-08-2005, 16:00
Descrizione della situazione:
http://img263.imageshack.us/img263/6938/immagine8hb.gif

Quella appena postata è la parte del DB interessata.
Praticamente devo cancellare 1 utente dalla conferenza, ma prima devo rimuoverlo dalle sue "partecipazioni e scelte". :)

Tutto facile in PHP, ma in JSP + DBTAGS sto impazzendo.

Al momento di fare l'aggiornamento dei posti disponibili, cioè posti++, dato che cancello 1 utente, compare il bellissimo messaggio di Tomcat che dice non si può passare da oggetto ad intero ... :(
Ma porc!! :muro:

Il codice è il seguente.

<%-- query, annidamento 0. Seleziono gli eventi della conferenza specifica --%>
<sql:statement id="statement1" conn="conn1">
<sql:query>
SELECT * FROM evento WHERE argomento='<%=request.getParameter("argomento")%>'
AND scadenza='<%=request.getParameter("scadenza")%>'
</sql:query>
<sql:resultSet id="rs1">
<sql:getColumn position="2" to="nome" scope="page" />
<sql:getColumn position="5" to="data" scope="page" />

<%-- altra query annidata, annidamento 1. Seleziono i collaterali agli eventi della conferenza specifica --%>
<sql:statement id="statement2" conn="conn1">
<sql:query>
SELECT * FROM possiede WHERE nome='<%=pageContext.getAttribute("nome")%>'
AND data='<%=pageContext.getAttribute("data")%>'
</sql:query>
<sql:resultSet id="rs2">
<sql:getColumn position="3" to="nome1" scope="page" />
<sql:getColumn position="4" to="data1" scope="page" />

<%-- altra query annidata, annidamento 2. Cancello la partecipazione ai collaterali. --%>
<sql:statement id="statement3" conn="conn1">
<sql:query>
DELETE FROM partecipa WHERE utente_id='<%= request.getParameter("utente_id") %>'
AND nome='<%=pageContext.getAttribute("nome1")%>' AND data='<%=pageContext.getAttribute("data1")%>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query annidata, annidamento 2 --%>

<%-- altra query annidata, annidamento 2. Tento l'update dei posti dei collaterali. --%>
<sql:statement id="statementA" conn="conn1">
<sql:query>
SELECT * FROM collaterale WHERE nome='<%=pageContext.getAttribute("nome1")%>'
AND data='<%=pageContext.getAttribute("data1")%>'
</sql:query>
<sql:resultSet id="rsA">Posti disponibili:
<sql:getNumber position="6" />
<sql:getNumber position="6" to="posti" scope="page" format="NUMBER"/>
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query annidata, annidamento 2 --%>

<%
out.print("Posti vecchi disponibili: " + pageContext.getAttribute("posti"));
int posti_disponibili_ev = pageContext.getAttribute("posti");
%>

<%-- altra query annidata, annidamento 2. Cancello la scelta degli eventi. --%>
<sql:statement id="statement4" conn="conn1">
<sql:query>
DELETE FROM scelto WHERE utente_id='<%= request.getParameter("utente_id") %>'
AND nome='<%=pageContext.getAttribute("nome")%>' AND data='<%=pageContext.getAttribute("data")%>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query annidata, annidamento 2 --%>

</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query annidata, annidamento 1 --%>

</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query annidata, annidamento 0 --%>

<%-- query, annidamento 0 --%>
<sql:statement id="statement5" conn="conn1">
<sql:query>
DELETE FROM iscritto WHERE utente_id='<%= request.getParameter("utente_id") %>'
AND argomento='<%=request.getParameter("argomento")%>' AND scadenza='<%=request.getParameter("scadenza")%>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query annidata, annidamento 0 --%>

In particolare la parte interessata penso sia questa:

<%-- altra query annidata, annidamento 2. Tento l'update dei posti dei collaterali. --%>
<sql:statement id="statementA" conn="conn1">
<sql:query>
SELECT * FROM collaterale WHERE nome='<%=pageContext.getAttribute("nome1")%>'
AND data='<%=pageContext.getAttribute("data1")%>'
</sql:query>
<sql:resultSet id="rsA">Posti disponibili:
<sql:getNumber position="6" />
<sql:getNumber position="6" to="posti" scope="page" format="NUMBER"/>
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query annidata, annidamento 2 --%>

<%
out.print("Posti vecchi disponibili: " + pageContext.getAttribute("posti"));
int posti_disponibili_ev = pageContext.getAttribute("posti");
%>

Eppure il metodo:

out.print("Posti vecchi disponibili: " + pageContext.getAttribute("posti"));

stampa tranquillamente il numero di posti.

Questo è il msg di Tomcat:
http://img43.imageshack.us/img43/4333/immagine0kg.gif

Se qualcuno se la cava meglio di me, sono in ascolto.
So che l'argomento è complesso, ma tentar a chiedere non nuoce.

Matrixbob
09-08-2005, 16:18
La documentazione delle DBTAGS, se qualcuno vuole darmi una mano, è qua:
http://jakarta.apache.org/taglibs/doc/dbtags-doc/dbtags-1.0/index.html

Matrixbob
09-08-2005, 16:35
Mamma mia ho fatto un escape da artista:

<%
out.print("Posti vecchi disponibili: " + pageContext.getAttribute("posti"));
int posti_disponibili_ev = Integer.parseInt((String)pageContext.getAttribute("posti"));
%>

Cavolo è una faticaccia però, anzi un po' una cacca lavorare così. :(
Ehm mi raccomando seguitemi fino ad UPDATE dei posti avvenuto, perchè ho proprio timore d'incontrare altre belle sorprese!
:mc: :O :cry: :fagiano:

Matrixbob
27-08-2005, 19:13
Per convertirlo in numero con virgola (dovrebbe chiamarsi float vero?!) avete idea di come fare senza farmi smanettare troppo?!
TNX.

PS
Io vado d'intuito:
Float.parseFloat

BlueDragon
27-08-2005, 20:06
Per convertirlo in numero con virgola (dovrebbe chiamarsi float vero?!) avete idea di come fare senza farmi smanettare troppo?!
TNX.

PS
Io vado d'intuito:
Float.parseFloat
Sì, Float.parseFloat(String s) è l'equivalente float di Integer.parseInt(String s)
:)

Matrixbob
27-08-2005, 21:00
Sì, Float.parseFloat(String s) è l'equivalente float di Integer.parseInt(String s)
:)
Ma perchè i tipi come: int, char, float li scrivo minuscoli ed invece String va scritto maiuscolo?!
Inoltre anche l'editor me lo colora di viola anzichè azzurro come gli altri tipi ... :mbe:

Sapete come rendere una variabile visibile in tutta la pgina col JSP + DBTAGS per caso?!

Altrimenti mi tocca fare un sacco d'annidamenti nei DBTAGS.

Sarà il primo e l'ultimo progetto in cui uso i DBTAGS ... fanno pena!

BlueDragon
27-08-2005, 22:16
Ma perchè i tipi come: int, char, float li scrivo minuscoli ed invece String va scritto maiuscolo?!
Inoltre anche l'editor me lo colora di viola anzichè azzurro come gli altri tipi ... :mbe:
Perché int, char e float sono tipi primitivi, mentre String è un oggetto. In realtà esistono anche le versioni oggetto di int,float e char...le loro classi si chiamano Integer, Char e Float ;)
Se ciò che scrivo ti sembra oscuro, ti consiglio di leggere un manuale Java...es: "Java Mattone dopo mattone" che puoi scaricare da qui:
http://www.java-net.it/download.html


Sapete come rendere una variabile visibile in tutta la pgina col JSP + DBTAGS per caso?!

Altrimenti mi tocca fare un sacco d'annidamenti nei DBTAGS.

Sarà il primo e l'ultimo progetto in cui uso i DBTAGS ... fanno pena!
Non conosco i DBTAGS, comunque in generale, se non la dichiari dentro un blocco particolare, basta che la dichiari all'inizio ed è visibile in tutto il resto della pagina...:)

Matrixbob
28-08-2005, 08:59
Perché int, char e float sono tipi primitivi, mentre String è un oggetto. In realtà esistono anche le versioni oggetto di int,float e char...le loro classi si chiamano Integer, Char e Float ;)
Se ciò che scrivo ti sembra oscuro, ti consiglio di leggere un manuale Java...es: "Java Mattone dopo mattone" che puoi scaricare da qui:
http://www.java-net.it/download.html
In download, infatti ieri sera ripensandoci mi pareva anche a me fosse così.

Matrixbob
28-08-2005, 09:08
...
<%-- annidamento 2. Cerco di capire se l'utente è anche un autore --%>
<sql:statement id="statementA1" conn="conn1">
<sql:query>
SELECT * FROM utente WHERE utente_id='<%= request.getParameter("utente_id") %>'
</sql:query>
<sql:resultSet id="rsA1">
<sql:getColumn position="6" to="cf" scope="page" />
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>

<%-- annidamento 2. Cerco di capire se l'utente è anche un autore --%>
<sql:statement id="statementB2" conn="conn1">
<sql:query>
SELECT * FROM autore WHERE cf='<%= pageContext.getAttribute("cf") %>'
</sql:query>
<sql:resultSet id="rsB2">
<sql:wasNotEmpty> <% String autore="TRUE"; %> </sql:wasNotEmpty>
</sql:resultSet>
<sql:wasEmpty> <% String autore="FALSE"; %> </sql:wasEmpty>
<sql:execute ignoreErrors="true" />
</sql:statement>
...

In questa maniera se + in basso nella pagina richiamao la variabile autore per far fare 1 ramo di codice diverso in base al fatto che l'utente sia anche autore o meno mi risulta impossibile.
Tomcat mi dice che non trova da nessuna parte la variabile autore.

Solo tra quei 2 TAG <sql:wasNotEmpty> & <sql:wasEmpty> esiste!!! :(

Se + avanti nella pagina JSP, fuori dai TAG precedenti faccio

...
<% out.print("Autore: " + autore + "<br />"); %>
...

Tomcat s'incazza!!!
:rolleyes: :stordita: :O :cry:

Matrixbob
28-08-2005, 09:19
Morale della favola:
Se non torvo una maniera x rendere "static" la variabile autore, mi tocchera spostare i rami di codice con altri statement all'interno di quei 2 TAG ed il che significa:
IL DELIIIRIIIIOOOOO!

Aiuto! :help: :doh:

BlueDragon
28-08-2005, 13:17
Evidentemente <% String autore="TRUE"; %> e <% String autore="FALSE"; %> si trovano all'interno di particolari blocchi di codice...anche perché, se non fossero "blocchi locali", avresti due volte la dichiarazione della stessa variabile! :)
Se ti va di curiosare, esiste una cartella in Tomcat in cui puoi vedere come sono stati tradotti i TAG in fase di compilazione...cerca la cartella "work" (allo stesso livello di WebApp) e sbircia nelle sottocartelle...:)

Comunque se vuoi autore come variabile "globale", non dichiararla all'interno di quei tag...dichiarala prima! :)

Fai all'inizio pagina:
<% String autore %>

e modifica quindi i punti in cui gli assegni un valore in:
<% autore="TRUE"; %> e <% autore="FALSE"; %> (eliminando la dichiarazione del tipo)

e vedrai che funziona anche dopo :)

Approposito, visto che ci assegni i valori "TRUE" e "FALSE", potrebbe essere conveniente dichiararla direttamente boolean...o Boolean :)

Matrixbob
28-08-2005, 14:29
Evidentemente <% String autore="TRUE"; %> e <% String autore="FALSE"; %> si trovano all'interno di particolari blocchi di codice...anche perché, se non fossero "blocchi locali", avresti due volte la dichiarazione della stessa variabile! :)
Se ti va di curiosare, esiste una cartella in Tomcat in cui puoi vedere come sono stati tradotti i TAG in fase di compilazione...cerca la cartella "work" (allo stesso livello di WebApp) e sbircia nelle sottocartelle...:)

Comunque se vuoi autore come variabile "globale", non dichiararla all'interno di quei tag...dichiarala prima! :)

Fai all'inizio pagina:
<% String autore %>

e modifica quindi i punti in cui gli assegni un valore in:
<% autore="TRUE"; %> e <% autore="FALSE"; %> (eliminando la dichiarazione del tipo)

e vedrai che funziona anche dopo :)

Approposito, visto che ci assegni i valori "TRUE" e "FALSE", potrebbe essere conveniente dichiararla direttamente boolean...o Boolean :)
Ok, provo e ti faccio sapere. :)

Matrixbob
28-08-2005, 16:52
Ok adesso funziona, peccato che non posso provarlo bene, ma dovrebbe funzionare.
Ho qualche errore in questo codice che ho partorito pieno di annidamenti di query!!! :(


<%-- una delle pagine che mi permettono la cancellazione da una conferenza --%>
<jsp:include page = "top.jsp" flush="true" />
<%@ page errorPage = "ErrorPage.jsp" %>
<br />
<%@ taglib uri="http://jakarta.apache.org/taglibs/dbtags" prefix="sql" %>

<%-- open a database connection --%>
<sql:connection id="conn1">
<%-- required --%>
<sql:url>jdbc:mysql://localhost/sysconf</sql:url>
<%-- optional --%>
<sql:driver>org.gjt.mm.mysql.Driver</sql:driver>
<%-- optional --%>
<sql:userId>root</sql:userId>
<%-- optional --%>
<sql:password>cane</sql:password>
</sql:connection>

<%-- Definisco ed inizializzo le variabili che mi servono --%>
<%
String autore="FALSE";

int posti_vecchi_ev=0;
int posti_nuovi_ev=0;

float spesa_tot_nuova=0;
float spesa_tot_vecchia=0;
float costo=0;
%>

<%-- Provo a capire se l'utente è anche un autore di qualche lavoro --%>
<sql:statement id="statementA" conn="conn1">
<sql:query>
SELECT * FROM utente WHERE utente_id='<%= request.getParameter("utente_id") %>'
</sql:query>
<sql:resultSet id="rsA">
<sql:getColumn position="6" to="cf" scope="page" />
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>

<sql:statement id="statementB" conn="conn1">
<sql:query>
SELECT * FROM autore WHERE cf='<%= pageContext.getAttribute("cf") %>'
</sql:query>
<sql:resultSet id="rsB">
<sql:wasNotEmpty> <% autore="TRUE"; %> </sql:wasNotEmpty>
</sql:resultSet>
<sql:wasEmpty> <% autore="FALSE"; %> </sql:wasEmpty>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- A questo punto dovrei averlo capito --%>

<% out.print("Autore: " + autore + "<br />"); %>

<br />
<div align="center">
<fieldset id="nominativo">
<legend>Cancella</legend>

<%-- Annidamento 0. Seleziono gli eventi della conferenza specifica. --%>
<sql:statement id="statementC" conn="conn1">
<sql:query>
SELECT * FROM evento WHERE argomento='<%=request.getParameter("argomento")%>'
AND scadenza='<%=request.getParameter("scadenza")%>'
</sql:query>
<sql:resultSet id="rsC">
<sql:getColumn position="2" to="nome" scope="page" />
<sql:getColumn position="5" to="data" scope="page" />

<%-- Annidamento 1. Seleziono i collaterali agli eventi della conferenza. --%>
<sql:statement id="statementD" conn="conn1">
<sql:query>
SELECT * FROM possiede WHERE nome='<%=pageContext.getAttribute("nome")%>'
AND data='<%=pageContext.getAttribute("data")%>'
</sql:query>
<sql:resultSet id="rsD">
<sql:getColumn position="3" to="nome1" scope="page" />
<sql:getColumn position="4" to="data1" scope="page" />

<%-- Annidamento 2. Select dei collaterali a cui partecipo. --%>
<sql:statement id="statementE" conn="conn1">
<sql:query>
SELECT * FROM partecipa WHERE utente_id='<%= request.getParameter("utente_id") %>'
AND nome='<%=pageContext.getAttribute("nome1")%>'
AND data='<%=pageContext.getAttribute("data1")%>'
</sql:query>
<sql:resultSet id="rsE">
<sql:getColumn position="2" to="nome_delete" scope="page" />
<sql:getColumn position="3" to="data_delete" scope="page" />

<%-- Annidamento 3. Preparo l'update dei posti dei collaterali. --%>
<sql:statement id="statementF" conn="conn1">
<sql:query>
SELECT * FROM collaterale
WHERE nome='<%=pageContext.getAttribute("nome_delete")%>'
AND data='<%=pageContext.getAttribute("data_delete")%>'
</sql:query>
<sql:resultSet id="rsF">
<sql:getNumber position="6" to="posti" scope="page" format="NUMBER"/>
<sql:getNumber position="7" to="costo" scope="page" format="NUMBER"/>
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query F, annidamento 3 --%>

<%
posti_vecchi_ev = Integer.parseInt((String)pageContext.getAttribute("posti"));
out.print("Collaterale: posti vecchi disponibili: " + posti_vecchi_ev + "<br />");
posti_nuovi_ev = posti_vecchi_ev + 1;
out.print("Collaterale: posti nuovi disponibili: " + posti_nuovi_ev + "<br />");
%>

<%-- Annidamento 3. Tento l'update dei posti dei collaterali. --%>
<sql:statement id="statementG" conn="conn1">
<sql:query>
UPDATE collaterale SET posti_disponibili='<% out.print(posti_nuovi_ev); %>'
WHERE nome='<%=pageContext.getAttribute("nome_delete")%>'
AND data='<%=pageContext.getAttribute("data_delete")%>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query G, annidamento 3 --%>

<%-- Annidamento 3. Cancello la partecipazione ai collaterali. --%>
<sql:statement id="statementH" conn="conn1">
<sql:query>
DELETE FROM partecipa WHERE utente_id='<%= request.getParameter("utente_id") %>'
AND nome='<%=pageContext.getAttribute("nome_delete")%>'
AND data='<%=pageContext.getAttribute("data_delete")%>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query H, annidamento 3 --%>

</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query E, annidamento 2 di select dei collaterali a cui partecipo --%>

<%-- Annidamento 2. Preparo l'update della spesa dell'utente x i collaterali. --%>
<sql:statement id="statementI" conn="conn1">
<sql:query>
SELECT * FROM utente WHERE utente_id='<%= request.getParameter("utente_id") %>'
</sql:query>
<sql:resultSet id="rsI">
<sql:getNumber position="8" to="spesa" scope="page" format="NUMBER"/>
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>

<% if (autore.equals("FALSE")) {
costo = Float.parseFloat((String)pageContext.getAttribute("costo"));
spesa_tot_vecchia = Float.parseFloat((String)pageContext.getAttribute("spesa"));
spesa_tot_nuova = spesa_tot_vecchia - costo;
out.print("Costo: " + costo + "<br />");
out.print("spesa_tot_vecchia: " + spesa_tot_vecchia + "<br />");
out.print("spesa_tot_nuova: " + spesa_tot_nuova + "<br />");
}
else {
costo = Float.parseFloat((String)pageContext.getAttribute("costo"));
spesa_tot_vecchia = Float.parseFloat((String)pageContext.getAttribute("spesa"));
spesa_tot_nuova = spesa_tot_vecchia - (costo - ((costo * 20) / 100));
out.print("Costo: " + costo + "<br />");
out.print("spesa_tot_vecchia: " + spesa_tot_vecchia + "<br />");
out.print("spesa_tot_nuova: " + spesa_tot_nuova + "<br />");
}
%>

<%-- Annidamento 2. Tento l'update della spesa dell'utente x i collaterali. --%>
<sql:statement id="statementL" conn="conn1">
<sql:query>
UPDATE utente SET spesa_tot ='<% out.print(spesa_tot_nuova); %>'
WHERE utente_id='<%= request.getParameter("utente_id") %>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine annidamento 2. Update della spesa dell'utente x i collaterali. --%>

</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query D, annidamento 1 di selezione di collaterali agli eventi della conferenza --%>

<%-- Annidamento 1. Select degli eventi che ho scelto. --%>
<sql:statement id="statementM" conn="conn1">
<sql:query>
SELECT * FROM scelto WHERE utente_id='<%= request.getParameter("utente_id") %>'
AND nome='<%=pageContext.getAttribute("nome")%>'
AND data='<%=pageContext.getAttribute("data")%>'
</sql:query>
<sql:resultSet id="rsM">
<sql:getColumn position="2" to="nome_delete" scope="page" />
<sql:getColumn position="3" to="data_delete" scope="page" />

<%-- Annidamento 2. Preparo l'update dei posti degli eventi. --%>
<sql:statement id="statementN" conn="conn1">
<sql:query>
SELECT * FROM evento WHERE nome='<%=pageContext.getAttribute("nome_delete")%>'
AND data='<%=pageContext.getAttribute("data_delete")%>'
</sql:query>
<sql:resultSet id="rsN">
<sql:getNumber position="6" to="posti" scope="page" format="NUMBER"/>
<sql:getNumber position="7" to="costo" scope="page" format="NUMBER"/>
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query N, annidamento 2 --%>

<%
posti_vecchi_ev = Integer.parseInt((String)pageContext.getAttribute("posti"));
out.print("Evento: posti vecchi disponibili: " + posti_vecchi_ev + "<br />");
posti_nuovi_ev = posti_vecchi_ev + 1;
out.print("Evento: posti nuovi disponibili: " + posti_nuovi_ev + "<br />");
%>

<%-- Annidamento 2. Tento l'update dei posti degli eventi. --%>
<sql:statement id="statementO" conn="conn1">
<sql:query>
UPDATE evento SET posti_disponibili='<% out.print(posti_nuovi_ev); %>'
WHERE nome='<%=pageContext.getAttribute("nome")%>'
AND data='<%=pageContext.getAttribute("data")%>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query O, annidamento 2 --%>

<%-- Annidamento 2. Cancello la scelta degli eventi. --%>
<sql:statement id="statementP" conn="conn1">
<sql:query>
DELETE FROM scelto WHERE utente_id='<%= request.getParameter("utente_id") %>'
AND nome='<%=pageContext.getAttribute("nome_delete")%>'
AND data='<%=pageContext.getAttribute("data_delete")%>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query P, annidamento 2 --%>

</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query annidata M, annidamento 1 --%>

<%-- Annidamento 1. Tento l'update della spesa dell'utente x gli eventi. --%>
<sql:statement id="statementQ" conn="conn1">
<sql:query>
SELECT * FROM utente WHERE utente_id='<%= request.getParameter("utente_id") %>'
</sql:query>
<sql:resultSet id="rsQ">
<sql:getNumber position="8" to="spesa" scope="page" format="NUMBER"/>
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>

<% if (autore.equals("FALSE")) {
costo = Float.parseFloat((String)pageContext.getAttribute("costo"));
spesa_tot_vecchia = Float.parseFloat((String)pageContext.getAttribute("spesa"));
spesa_tot_nuova = spesa_tot_vecchia - costo;
out.print("Costo: " + costo + "<br />");
out.print("spesa_tot_vecchia: " + spesa_tot_vecchia + "<br />");
out.print("spesa_tot_nuova: " + spesa_tot_nuova + "<br />");
}
else {
costo = Float.parseFloat((String)pageContext.getAttribute("costo"));
spesa_tot_vecchia = Float.parseFloat((String)pageContext.getAttribute("spesa"));
spesa_tot_nuova = spesa_tot_vecchia - (costo - ((costo * 20) / 100));
out.print("Costo: " + costo + "<br />");
out.print("spesa_tot_vecchia: " + spesa_tot_vecchia + "<br />");
out.print("spesa_tot_nuova: " + spesa_tot_nuova + "<br />");
}
%>

<sql:statement id="statementR" conn="conn1">
<sql:query>
UPDATE utente SET spesa_tot ='<% out.print(spesa_tot_nuova); %>'
WHERE utente_id='<%= request.getParameter("utente_id") %>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query R, annidamento 1. Update della spesa dell'utente x gli eventi. --%>

</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query C, annidamento 0 di selezione degli eventi della conferenza specifica. --%>

<%-- Annidamento 0 per cancellare l'iscrizione ad una conferenza --%>
<sql:statement id="statementS" conn="conn1">
<sql:query>
DELETE FROM iscritto WHERE utente_id='<%= request.getParameter("utente_id") %>'
AND argomento='<%=request.getParameter("argomento")%>'
AND scadenza='<%=request.getParameter("scadenza")%>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query S, annidamento 0 --%>

<h3 align="center"><font color="green">Utente cancellato dalla conferenza.</font></h3>
<%-- <meta http-equiv="Refresh" content="5;
url=http://localhost:8080/www/j2ee-sysconf/menu.jsp" /> --%>
</fieldset>
</div>

<sql:closeConnection conn="conn1"/>
<br />
<jsp:include page="bottom.jsp" flush="true" />

Sta volta Tomcat non mi da errore, ma mi restituisce una pagina bianca e mo come faccio a sapere dove ho scazzato qualcosa?!
Sarà per tutte le query con ignoreErrors="true"?!
Stasera quando torno dalla corsa provo a sostituirli in automatico col editor in "false".

Se nel frattempo qualcun'altro ha un'altra idea, son tutt'occhi! :read:

BlueDragon
28-08-2005, 18:42
Sta volta Tomcat non mi da errore, ma mi restituisce una pagina bianca e mo come faccio a sapere dove ho scazzato qualcosa?!
Sarà per tutte le query con ignoreErrors="true"?!
Stasera quando torno dalla corsa provo a sostituirli in automatico col editor in "false".

Se nel frattempo qualcun'altro ha un'altra idea, son tutt'occhi! :read:
Non ho guardato tutto il codice, ma ti consiglio di riscriverlo togliendo più annidamenti possibili ora che sai come avere delle variabili "durature".
Per quanto riguarda l'errore, è possibile che sia mascherato da ignoreErrors="true"...se anche mettendolo a false non trovi nulla, prova a mettere un po' di out.println per capire a che punto si ferma :)

Matrixbob
28-08-2005, 19:20
prova a mettere un po' di out.println per capire a che punto si ferma :)
Una pagina bianca significa che si ferma subito suppongo! :)
Deve esserci qualcosa di strano, cmq doccio, magno e controllo! :)

[EDIT]
Mi sa che gli annidamenti non posso toglierli perchè le DBTAGS con il tag "<sql:resultSet>" auto-ciclano sul SetRisultato e quindi per ottenre le combinazioni devo annidarle lì dentro!
almeno così ho capito dalla documetazione on-line:
http://jakarta.apache.org/taglibs/doc/dbtags-doc/dbtags-1.0/index.html

Mi chiedo se con le JSTL tags la vita fosse stata diversa ... altrimenti la prox volta programmo in Java puro! :)

BlueDragon
28-08-2005, 19:27
Una pagina bianca significa che si ferma subito suppongo! :)
Deve esserci qualcosa di strano, cmq doccio, magno e controllo! :)
Uhm..no, a pensarci bene no, non è detto che si fermi subito. Purtroppo non è così semplice quando si tratta di debuggare le jsp...anziché fare out.println forse è meglio se fai System.out.println e ti vai a guardare cosa appare nella console del Tomcat...(dove probabilmente avrai anche l'indicazione dell'errore anziché una poco significativa pagina bianca).

Matrixbob
28-08-2005, 19:31
Uhm..no, a pensarci bene no, non è detto che si fermi subito. Purtroppo non è così semplice quando si tratta di debuggare le jsp...anziché fare out.println forse è meglio se fai System.out.println e ti vai a guardare cosa appare nella console del Tomcat...(dove probabilmente avrai anche l'indicazione dell'errore anziché una poco significativa pagina bianca).
Quindi in uno di questi log:
C:\Programmi\Apache Software Foundation\Tomcat 5.5\logs

vero?!

BlueDragon
28-08-2005, 20:13
Quindi in uno di questi log:
C:\Programmi\Apache Software Foundation\Tomcat 5.5\logs

vero?!
Forse sì, non conosco le opzioni di log di Tomcat quindi non ne ho la certezza. Io intendevo proprio la console..cioé quella finestrina nera "tipo DOS" che si apre quando avvi Tomcat....a meno che tu non lo abbia installato come servizio, in quel caso mi sa che non fa vedere la finestrella :)

Matrixbob
28-08-2005, 20:27
Forse sì, non conosco le opzioni di log di Tomcat quindi non ne ho la certezza. Io intendevo proprio la console..cioé quella finestrina nera "tipo DOS" che si apre quando avvi Tomcat....a meno che tu non lo abbia installato come servizio, in quel caso mi sa che non fa vedere la finestrella :)
Mmmm mi sa che controllerò domani, stasera mi sento un po' rimbambito e scazzato, porto in garage l'auto e gioco a StarCraft! :)

CMQ Dragon sei stato veramente utile e paziente, domani ti faccio sepere se risolvo o meno.

Grazie ancora!!

Matrixbob
29-08-2005, 17:38
C'è l'ho fatta Dragon!!!
alla fine ho partorito questo codice ...

<%-- una delle pagine che mi permettono la cancellazione da una conferenza --%>
<jsp:include page = "top.jsp" flush="true" />
<%@ page errorPage = "ErrorPage.jsp" %>
<br />
<%@ taglib uri="http://jakarta.apache.org/taglibs/dbtags" prefix="sql" %>

<%-- open a database connection --%>
<sql:connection id="conn1">
<%-- required --%>
<sql:url>jdbc:mysql://localhost/sysconf</sql:url>
<%-- optional --%>
<sql:driver>org.gjt.mm.mysql.Driver</sql:driver>
<%-- optional --%>
<sql:userId>root</sql:userId>
<%-- optional --%>
<sql:password>cane</sql:password>
</sql:connection>

<%-- Definisco ed inizializzo le variabili che mi servono --%>
<%
String autore="FALSE";

int posti_vecchi_ev=0;
int posti_nuovi_ev=0;

float spesa_tot_nuova=0;
float spesa_tot_vecchia=0;
float costo=0;
%>

<%-- Provo a capire se l'utente è anche un autore di qualche lavoro --%>
<sql:statement id="statementA" conn="conn1">
<sql:query>
SELECT * FROM utente WHERE utente_id='<%= request.getParameter("utente_id") %>'
</sql:query>
<sql:resultSet id="rsA">
<sql:getColumn position="6" to="cf" scope="page" />
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>

<sql:statement id="statementB" conn="conn1">
<sql:query>
SELECT * FROM autore WHERE cf='<%= pageContext.getAttribute("cf") %>'
</sql:query>
<sql:resultSet id="rsB">
<sql:wasNotEmpty> <% autore="TRUE"; %> </sql:wasNotEmpty>
</sql:resultSet>
<sql:wasEmpty> <% autore="FALSE"; %> </sql:wasEmpty>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- A questo punto dovrei averlo capito --%>

<% out.print("Autore: " + autore + "<br />"); %>

<br />
<div align="center">
<fieldset id="nominativo">
<legend>Cancella</legend>

<%-- Annidamento 0. Seleziono gli eventi della conferenza specifica. --%>
<sql:statement id="statementC" conn="conn1">
<sql:query>
SELECT * FROM evento WHERE argomento='<%=request.getParameter("argomento")%>'
AND scadenza='<%=request.getParameter("scadenza")%>'
</sql:query>
<sql:resultSet id="rsC">
<sql:getColumn position="2" to="nome" scope="page" />
<sql:getColumn position="5" to="data" scope="page" />

<%-- Annidamento 1. Seleziono i collaterali agli eventi della conferenza. --%>
<sql:statement id="statementD" conn="conn1">
<sql:query>
SELECT * FROM possiede WHERE nome='<%=pageContext.getAttribute("nome")%>'
AND data='<%=pageContext.getAttribute("data")%>'
</sql:query>
<sql:resultSet id="rsD">
<sql:getColumn position="3" to="nome1" scope="page" />
<sql:getColumn position="4" to="data1" scope="page" />

<%-- Annidamento 2. Select dei collaterali a cui partecipo. --%>
<sql:statement id="statementE" conn="conn1">
<sql:query>
SELECT * FROM partecipa WHERE utente_id='<%= request.getParameter("utente_id") %>'
AND nome='<%=pageContext.getAttribute("nome1")%>'
AND data='<%=pageContext.getAttribute("data1")%>'
</sql:query>
<sql:resultSet id="rsE">
<sql:getColumn position="2" to="nome_delete" scope="page" />
<sql:getColumn position="3" to="data_delete" scope="page" />

<%-- Annidamento 3. Preparo l'update dei posti dei collaterali. --%>
<sql:statement id="statementF" conn="conn1">
<sql:query>
SELECT * FROM collaterale
WHERE nome='<%=pageContext.getAttribute("nome_delete")%>'
AND data='<%=pageContext.getAttribute("data_delete")%>'
</sql:query>
<sql:resultSet id="rsF">
<sql:getNumber position="6" to="posti" scope="page" format="NUMBER"/>
<sql:getNumber position="7" to="costo" scope="page" format="NUMBER"/>
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query F, annidamento 3 --%>

<%
posti_vecchi_ev = Integer.parseInt((String)pageContext.getAttribute("posti"));
out.print("Collaterale: posti vecchi disponibili: " + posti_vecchi_ev + "<br />");
posti_nuovi_ev = posti_vecchi_ev + 1;
out.print("Collaterale: posti nuovi disponibili: " + posti_nuovi_ev + "<br />");
%>

<%-- Annidamento 3. Tento l'update dei posti dei collaterali. --%>
<sql:statement id="statementG" conn="conn1">
<sql:query>
UPDATE collaterale SET posti_disponibili='<% out.print(posti_nuovi_ev); %>'
WHERE nome='<%=pageContext.getAttribute("nome_delete")%>'
AND data='<%=pageContext.getAttribute("data_delete")%>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query G, annidamento 3 --%>

<%-- Annidamento 3. Cancello la partecipazione ai collaterali. --%>
<sql:statement id="statementH" conn="conn1">
<sql:query>
DELETE FROM partecipa WHERE utente_id='<%= request.getParameter("utente_id") %>'
AND nome='<%=pageContext.getAttribute("nome_delete")%>'
AND data='<%=pageContext.getAttribute("data_delete")%>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query H, annidamento 3 --%>

<%-- Annidamento 3. Preparo l'update della spesa dell'utente x i collaterali. --%>
<sql:statement id="statementI" conn="conn1">
<sql:query>
SELECT * FROM utente WHERE utente_id='<%= request.getParameter("utente_id") %>'
</sql:query>
<sql:resultSet id="rsI">
<sql:getNumber position="8" to="spesa" scope="page" format="NUMBER"/>
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>

<% if (autore.equals("FALSE")) {
costo = Float.parseFloat((String)pageContext.getAttribute("costo"));
spesa_tot_vecchia = Float.parseFloat((String)pageContext.getAttribute("spesa"));
spesa_tot_nuova = spesa_tot_vecchia - costo;
out.print("Costo: " + costo + "<br />");
out.print("spesa_tot_vecchia: " + spesa_tot_vecchia + "<br />");
out.print("spesa_tot_nuova: " + spesa_tot_nuova + "<br />");
}
else {
costo = Float.parseFloat((String)pageContext.getAttribute("costo"));
spesa_tot_vecchia = Float.parseFloat((String)pageContext.getAttribute("spesa"));
spesa_tot_nuova = spesa_tot_vecchia - (costo - ((costo * 20) / 100));
out.print("Costo: " + costo + "<br />");
out.print("spesa_tot_vecchia: " + spesa_tot_vecchia + "<br />");
out.print("spesa_tot_nuova: " + spesa_tot_nuova + "<br />");
}
%>

<%-- Annidamento 3. Tento l'update della spesa dell'utente x i collaterali. --%>
<sql:statement id="statementL" conn="conn1">
<sql:query>
UPDATE utente SET spesa_tot ='<% out.print(spesa_tot_nuova); %>'
WHERE utente_id='<%= request.getParameter("utente_id") %>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine annidamento 3. Update della spesa dell'utente x i collaterali. --%>

</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query E, annidamento 2 di select dei collaterali a cui partecipo --%>

</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query D, annidamento 1 di selezione di collaterali agli eventi della conferenza --%>

<%-- Annidamento 1. Select degli eventi che ho scelto. --%>
<sql:statement id="statementM" conn="conn1">
<sql:query>
SELECT * FROM scelto WHERE utente_id='<%= request.getParameter("utente_id") %>'
AND nome='<%=pageContext.getAttribute("nome")%>'
AND data='<%=pageContext.getAttribute("data")%>'
</sql:query>
<sql:resultSet id="rsM">
<sql:getColumn position="2" to="nome_delete" scope="page" />
<sql:getColumn position="3" to="data_delete" scope="page" />

<%-- Annidamento 2. Preparo l'update dei posti degli eventi. --%>
<sql:statement id="statementN" conn="conn1">
<sql:query>
SELECT * FROM evento WHERE nome='<%=pageContext.getAttribute("nome_delete")%>'
AND data='<%=pageContext.getAttribute("data_delete")%>'
</sql:query>
<sql:resultSet id="rsN">
<sql:getNumber position="6" to="posti" scope="page" format="NUMBER"/>
<sql:getNumber position="7" to="costo" scope="page" format="NUMBER"/>
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query N, annidamento 2 --%>

<%
posti_vecchi_ev = Integer.parseInt((String)pageContext.getAttribute("posti"));
out.print("Evento: posti vecchi disponibili: " + posti_vecchi_ev + "<br />");
posti_nuovi_ev = posti_vecchi_ev + 1;
out.print("Evento: posti nuovi disponibili: " + posti_nuovi_ev + "<br />");
%>

<%-- Annidamento 2. Tento l'update dei posti degli eventi. --%>
<sql:statement id="statementO" conn="conn1">
<sql:query>
UPDATE evento SET posti_disponibili='<% out.print(posti_nuovi_ev); %>'
WHERE nome='<%=pageContext.getAttribute("nome")%>'
AND data='<%=pageContext.getAttribute("data")%>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query O, annidamento 2 --%>

<%-- Annidamento 2. Cancello la scelta degli eventi. --%>
<sql:statement id="statementP" conn="conn1">
<sql:query>
DELETE FROM scelto WHERE utente_id='<%= request.getParameter("utente_id") %>'
AND nome='<%=pageContext.getAttribute("nome_delete")%>'
AND data='<%=pageContext.getAttribute("data_delete")%>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query P, annidamento 2 --%>

<%-- Annidamento 2. Tento l'update della spesa dell'utente x gli eventi. --%>
<sql:statement id="statementQ" conn="conn1">
<sql:query>
SELECT * FROM utente WHERE utente_id='<%= request.getParameter("utente_id") %>'
</sql:query>
<sql:resultSet id="rsQ">
<sql:getNumber position="8" to="spesa" scope="page" format="NUMBER"/>
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>

<% if (autore.equals("FALSE")) {
costo = Float.parseFloat((String)pageContext.getAttribute("costo"));
spesa_tot_vecchia = Float.parseFloat((String)pageContext.getAttribute("spesa"));
spesa_tot_nuova = spesa_tot_vecchia - costo;
out.print("Costo: " + costo + "<br />");
out.print("spesa_tot_vecchia: " + spesa_tot_vecchia + "<br />");
out.print("spesa_tot_nuova: " + spesa_tot_nuova + "<br />");
}
else {
costo = Float.parseFloat((String)pageContext.getAttribute("costo"));
spesa_tot_vecchia = Float.parseFloat((String)pageContext.getAttribute("spesa"));
spesa_tot_nuova = spesa_tot_vecchia - (costo - ((costo * 20) / 100));
out.print("Costo: " + costo + "<br />");
out.print("spesa_tot_vecchia: " + spesa_tot_vecchia + "<br />");
out.print("spesa_tot_nuova: " + spesa_tot_nuova + "<br />");
}
%>

<sql:statement id="statementR" conn="conn1">
<sql:query>
UPDATE utente SET spesa_tot ='<% out.print(spesa_tot_nuova); %>'
WHERE utente_id='<%= request.getParameter("utente_id") %>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query R, annidamento 21. Update della spesa dell'utente x gli eventi. --%>

</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query annidata M, annidamento 1 --%>

</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query C, annidamento 0 di selezione degli eventi della conferenza specifica. --%>

<%-- Annidamento 0 per cancellare l'iscrizione ad una conferenza --%>
<sql:statement id="statementS" conn="conn1">
<sql:query>
DELETE FROM iscritto WHERE utente_id='<%= request.getParameter("utente_id") %>'
AND argomento='<%=request.getParameter("argomento")%>'
AND scadenza='<%=request.getParameter("scadenza")%>'
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%-- fine query S, annidamento 0 --%>

<h3 align="center"><font color="green">Utente cancellato dalla conferenza.</font></h3>
<%-- <meta http-equiv="Refresh" content="5;
url=http://localhost:8080/www/j2ee-sysconf/menu.jsp" /> --%>
</fieldset>
</div>

<sql:closeConnection conn="conn1"/>
<br />
<jsp:include page="bottom.jsp" flush="true" />

... come previsto ero un problema di annidamenti, mi son messo li con pazienza a tirare le righe da annidamento ad annidamento ... uno sbattimento! :)

Spero serva a qualcuno questa mia creatura, mi sa che è l'unica sul forum, tenetevela preziosa!!! :D

BlueDragon
29-08-2005, 20:25
Ben fatto!:)
E' sempre una buona cosa riscrivere il codice per semplificarlo..costa un po' di fatica ma ne puo' salvare tanta dopo..:)

Matrixbob
30-08-2005, 14:01
Link inerenti:
[Tomcat] Cosa significa quando restituisce 1 pagina bianca invece dell'errore?! (http://www.hwupgrade.it/forum/showthread.php?t=1002832)