ok, però io ho bisogno di richiamare la funzione "calcolatot()" nella parte dichiarazione, perchè il loop che crea il TD di quei campi ai quali associo la funzione è scritto li dentro.

Forse c'è qualcosa che mi sfugge, visto che sono molto inesperta, comunque ti mando il pezzo di codice per intero per farti capire.
grazie

<%!
public int StampaForm (int id_utente, GregorianCalendar date, JspWriter out, int n_newrighe, int nOffset, Connection con)
throws IOException, SQLException
{
Logger logger = Logger.getLogger ("pagina_ore_jsp");
int n_righemod =0;
Object[] ao = getCommesse(id_utente,date,con);
int [] anId = (int[])ao[0];
String [] astrCommesse = (String [])ao[1];
String [] astrCodComm = (String [])ao[2];
String [] astrDenom = (String [])ao[3];
String my_date = "'"+ date.get(Calendar.YEAR)+"-" +
(date.get(Calendar.MONTH)+1)+ "-" +
date.get(Calendar.DATE)+"'";
Statement statement = con.createStatement();
String select = new String (
"SELECT o.id, o.id_commessa, nome, ore_ord, ore_straord, ore_viaggio, note, "+
"bloccata, c.cod_commessa, o.costo_orario "+
"FROM ore_giornaliere o, commesse c, allocazione_utente a " +
"WHERE o.id_utente = "+id_utente+
" AND data=" + my_date +
" AND c.id = o.id_commessa"+
" AND a.id_utente = "+id_utente+
" AND c.id = a.id_commessa ");
logger.info("Sono nella StampaForm() select: "+select);
ResultSet rs = statement.executeQuery(select);

int j= nOffset;
String cod_comm = "";
String nome = "";
String note = "";

// Righe gia' esistenti
while(rs.next())
{
int id = rs.getInt(1);
int id_commessa = rs.getInt(2);
nome = rs.getString(3);
float oreord = rs.getFloat(4);
float orestraord = rs.getFloat(5);
float oreviaggio = rs.getFloat(6);
note = rs.getString(7);
int bloc = rs.getInt(8);
cod_comm = rs.getString(9);
double dCostoOrario= rs.getDouble(10);
if(bloc == 1)
{
// CAMPI VISIBILI, PER INPUT UTENTE
out.println("<tr bgcolor='#D3D3D3'>");
out.println("<td align = 'left' bgcolor='#D3D3D3'>"+nome+"</td>");
out.println("<td align='center' bgcolor='#D3D3D3'>"+oreord+"</td>");
out.println("<td align='center' bgcolor='#D3D3D3'>"+orestraord+"</td>");
out.println("<td align='center' bgcolor='#D3D3D3'>"+oreviaggio+"</td>");
out.println("<td align='center' bgcolor='#D3D3D3'>"+note+"</td>");
}
else
{
out.println ("<input type='hidden' name='rec"+j+"index1' value='"+id+"'>");
out.println ("<input type='hidden' name='rec"+j+"col6' value='"+id_utente+"'>");
out.println ("<input type='hidden' name='rec"+j+"col7' value=\""+"'" +
date.get(Calendar.YEAR)+"-"+
(date.get(Calendar.MONTH)+1)+"-"+
date.get(Calendar.DATE)+ "'"+"\">");
out.println ("<input type='hidden' name='rec"+j+"col5' value='"+bloc+"'>");
out.println ("<input type='hidden' name='rec"+j+"valid' value='0'>");
out.println ("<input type='hidden' name='rec"+j+"col9' value='"+dCostoOrario+"'>");

// CAMPI VISIBILI, PER INPUT UTENTE
out.println ("<tr>");
out.println ("<td width=100 align='center'>");
out.println ("<select name='rec"+j+"col8' width='100' maxlenght='30'>");

for (int i=0; i<astrCommesse.length; i++)
{
if (id_commessa== anId[i])
out.println("<Option value ='"+ anId[i]+ "' selected>"+astrCodComm[i]+" - "+astrDenom[i]+" - "+astrCommesse[i]+"</option>");
else
out.println("<Option value ='"+ anId[i]+"'>"+astrCodComm[i]+" - "+astrDenom[i]+" - "+astrCommesse[i]+"</option>");
}
out.println("</select>");
out.println ("</td>");
out.println ("<td align='center'>");

//************************************************** ***********
//*********QUESTA E' LA PARTE IN CUI DEVO RICHIAMARE LA FUNZIONE


out.println ("<input type='text' onkeypress='calcolatot()' name='rec"+j+"col1' maxlength='3' size='2' value='"+ oreord +"'>");

//************************************************** ***********





out.println ("</td>");
out.println ("<td align='center'>");
out.println ("<input type='text' name='rec"+j+"col2' maxlength='3' size='2' value='"+ orestraord +"'>");
out.println ("</td>");
out.println ("<td align='center'>");
out.println ("<input type='text' name='rec"+j+"col3' maxlength='3' size='2' value='"+ oreviaggio +"'>");
out.println ("</td>");
out.println ("<td align='center'>");
out.println ("<input type='text' name='rec"+j+"col4' size ='100' value='"+ note+"'>");
out.println ("</td>");
out.println ("</tr>");
j++;
}
}//chiudo il while
// Righe vuote
n_righemod = j-nOffset;
// Controllo se devo applicare la nuova tariffa
Statement statNewTariffa = con.createStatement();
String selectNewTariffa = new String (
"SELECT costo_orario, data_applicazione "+
"FROM nuova_tariffa " +
"WHERE id_utente = "+id_utente);
logger.info("selectNewTariffa:"+selectNewTariffa);
ResultSet rsNewTariffa = statNewTariffa.executeQuery(selectNewTariffa);
if (rsNewTariffa.next())
{
// Aggiungo eventuale 0 ai: giorni o mesi.
String strGiorno;
String strMese;
Integer giorno = new Integer(date.get(Calendar.DAY_OF_MONTH));
Integer mese = new Integer(date.get(Calendar.MONTH)+1);

if (giorno.intValue()<10)
strGiorno = "0"+giorno.toString();
else
strGiorno = giorno.toString();
strMese = mese.toString();
if (mese.intValue()<10)
strMese = "0"+mese.toString();
else
strMese = mese.toString();
Integer nAnno = new Integer(date.get(Calendar.YEAR));
String strAnno = nAnno.toString();
String my_new_date = strAnno+"-"+strMese+"-"+strGiorno;

// Se la data attuale è successiva alla data di applicazione della nuova tariffa
//if(dataC.getTime().compareTo(rsNewTariffa.getDate( "data_applicazione"))>=0)
//if(my_date.equals(rsNewTariffa.getDate("data_appli cazione").toString()))
//if(java.sql.Date.valueOf(strData).compareTo(rsNewT ariffa.getDate("data_applicazione"))==0)


/************************
Resta da risolvere il caso in cui l'utente decida di inserire delle ore
per il mese successivo a quello attuale, in cui potrebbe essere stata modificata
la tariffa.
****************************/

if(java.sql.Date.valueOf(my_new_date).compareTo(rs NewTariffa.getDate("data_applicazione"))>=0)
{
// Devo applicare la nuova tariffa.
double dNewTariffa = rsNewTariffa.getDouble(1);

// Aggiornare la tariffa vecchia nella tabella 'tariffe' con la nuova.
Statement statUpdTariffa = con.createStatement();
String strUpdTariffa = new String ("UPDATE tariffe "+
"SET costo_orario = "+dNewTariffa+
" WHERE id_utente="+id_utente);

logger.info("strUpdTariffa: "+strUpdTariffa);
int nUpdTariffa = statUpdTariffa.executeUpdate(strUpdTariffa);
// Controllare che l'update sia andato a buon fine.
if(nUpdTariffa != 1)
throw new SQLException
("Attenzione! Non è stato possibile effettuare\n " +
"l'aggiornamento nella tabella tariffe.");

// Cancellare la riga della nuova tariffa dalla tabella 'nuova_tariffa'.
Statement statDelTariffa = con.createStatement();
String strDelTariffa = new String ("DELETE FROM nuova_tariffa "+
" WHERE id_utente="+id_utente);
logger.info("strDelTariffa: "+strDelTariffa);
int nDelTariffa = statDelTariffa.executeUpdate(strDelTariffa);
// Controllare che l'update sia andato a buon fine.
if(nDelTariffa != 1)
throw new SQLException
("Attenzione! Non è stato possibile effettuare\n " +
"la cancellazione nella tabella nuova_tariffa.");
}
}

// Devo estrarre L'ATTUALE costo_orario dell'utente.
Statement statCostoAttuale = con.createStatement();
String selectCostoAttuale = new String (
"SELECT costo_orario "+
"FROM tariffe " +
"WHERE id_utente = "+id_utente);
ResultSet rsCostoAttuale = statCostoAttuale.executeQuery(selectCostoAttuale);
double dCostoAttuale=0;
if (rsCostoAttuale.next())
dCostoAttuale=rsCostoAttuale.getDouble("costo_orar io");

for (; j < n_newrighe+nOffset+n_righemod; j++)
{
// CAMPI HIDDEN
// colonna indice
out.println ("<input type='hidden' name='rec"+j+"index1' value='null'>");
// colonna id_utente
out.println ("<input type='hidden' name='rec"+j+"col6' value='"+id_utente+"'>");
// colonna data
out.println ("<input type='hidden' name='rec"+j+"col7' value=\""+"'" +
date.get(Calendar.YEAR)+"-"+
(date.get(Calendar.MONTH)+1)+"-"+
date.get(Calendar.DATE)+ "'"+"\">");
// colonna bloccata
out.println ("<input type='hidden' name='rec"+j+"col5' value='0'>");
//flag per individuare se almeno uno dei campi ore di quel record è valorizzato
// (flag=1 campo valorizzato, flag=0 campo non valorizzato )
out.println ("<input type='hidden' name='rec"+j+"valid' value='0'>");
// Devo cosiderare L'ATTUALE costo_orario dell'utente.
out.println ("<input type='hidden' name='rec"+j+"col9' value='"+dCostoAttuale+"'>");
// CAMPI VISIBILI, PER INPUT UTENTE
out.println ("<tr>");
out.println ("<td width=100 align=center>");
// colonna id_commessa
out.println ("<select name='rec"+j+"col8' width='100' maxlenght='30'>");
out.println("<Option value ='-1' selected>Seleziona una voce</option>");
for (int i=0; i<astrCommesse.length; i++)
{
out.println("<Option value ='"+ anId[i]+ "'>"+astrCodComm[i]+" - "+astrDenom[i]+" - "+astrCommesse[i]+"</option>");
}
out.println("</select>");
out.println ("</td>");
out.println ("<td align='center'>");
// colonna ore_ord
out.println ("<input type='text' name='rec"+j+"col1' maxlength='3' size='2'>");
out.println ("</td>");
out.println ("<td align='center'>");
// colonna ore_straord
out.println ("<input type='text' name='rec"+j+"col2' maxlength='3' size='2'>");
out.println ("</td>");
out.println ("<td align='center'>");
// colonna ore_viaggio
out.println ("<input type='text' name='rec"+j+"col3' maxlength='3' size='2'>");
out.println ("</td>");
out.println ("<td align='center'>");
// colonna note
out.println ("<input type='text' name='rec"+j+"col4' size='100'>");
out.println ("</td>");
out.println ("</tr>");
}
int tot_righe= n_righemod+ n_newrighe;
logger.info("Il totale delle righe modificabili e nuove è: " + tot_righe);
return tot_righe;
}
%>