Ho una JSP con un form importato includendo un'altra pagina JSP.
Prima di questo form ne ho un altro che mi permette di generare dinamicamente la tabella che va a comporre il form, nello specifico, seleziono un radio button a cui è associata una lettera e mi appare un form con degli ingredienti che iniziano con quella lettera presenti in un DB mysql.
Tutto questo funziona, il problema è che il form funziona solo al primo utilizzo, inserisco un valore nel campo text, clicco sul pulsante submit e viene regolarmente fatta la modifica sul DB. Fatta la modifica si torna alla JSP contenente i form, a questo punto se clicco su un radio button, invece di apparire la tabella che ci si aspetterebbe come prima, Tomcat da questo errore:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
java.lang.NumberFormatException: null
java.lang.Integer.parseInt(Unknown Source)
java.lang.Integer.parseInt(Unknown Source)
frontend.ModificaRimanenza.doPost(ModificaRimanenza.java:30)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.
frontend.ModificaRimanenza.doPost(ModificaRimanenza.java:30)
contiene la seguente istruzione:
int daModificare = Integer.parseInt(request.getParameter("totale_selezionati"));
In pratica request.getParameter("totale_selezionati") risulta essere null.
La servlet ModificaRimanenza è associata al form importato e non a quello coi radio botton, quindi mi pare molto strano che parta cliccando su un radio button senza che si clicchi sul pulsante submit dell'altra form.
A cosa può essere dovuto questo comportamento?
Codice della JSP che include la seconda
<%@ page language="java" contentType="text/html; charset=iso-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="controller.MagController" %>
<%!
static final String[][] TABS = {
{"A","showingrediente.jsp"},
{"B","showingrediente.jsp"},
{"C","showingrediente.jsp"
<!-- e così via fino a Z -->
};%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Modifica soglia</title>
<% int soglia_scadenza = MagController.getSoglia(); %>
<SCRIPT LANGUAGE="JavaScript">
<!--
function checkSogliaScadenza(obj) {
//permette solo numeri
scadenza = obj.value.replace(/\D/g,"");
obj.value = scadenza;
}
function checkFormScadenza(obj) {
if(document.modsoglia.scadenza.value <= 0) {
alert("La soglia di scadenza deve essere un intero maggiore di 1");
document.modsoglia.scadenza.value = "";
document.modsoglia.scadenza.focus();
return false;
}
return true;
}
//-->
</script>
</head>
<body>
<center>
<h2>Modifica valori di soglia</h2>
<br><br>
Modifica soglia di scadenza
<form name="modsoglia" action="ModificaScadenza" method="post">
<table width="300" border="0" cellpadding="6">
<tr>
<td width="65%">Soglia per date di scadenza</td>
<td width="35%"> <%= soglia_scadenza %> giorni</td>
</tr>
<tr>
<td>Nuovo valore di soglia</td>
<td><input type="text" name="scadenza" size="3" onChange="checkSogliaScadenza(this)" /> giorni</td>
</tr>
<tr>
<td><%if (session.getAttribute("esito_scadenza") != null)
if (session.getAttribute("esito_scadenza").equals("non_modificata")) {%>
<font color="red">Soglia non modificata!</font> <% } %></td>
<td><input type="submit" name="modsoglia" value="Modifica" onClick="return checkFormScadenza(this)"/></td>
</tr>
</table>
</form>
<br><br><br>
Modifica soglia rimanenze<br>
<form action="" method="post">
<%String which = request.getParameter("which");
if (which==null)
which = TABS[0][0];
String jspToRun = null;
for (int i=0; i<TABS.length; i++) {
String tabLabel = TABS[i][0];
String tabJSP = TABS[i][1];
String CHECKED = "";
if (which.equals(tabLabel)) {
CHECKED = "CHECKED";
jspToRun = tabJSP;
}
%>
<input name="which" type="radio" value="<%=tabLabel %>" <%= CHECKED %> onClick="this.form.submit()" /><%= tabLabel %>
<%
if (i==12) {%>
<br>
<% }
} %>
</form>
<jsp:include page="<%= jspToRun %>" flush="true" />
<br><br><br><br>
<a href="hpmagazziniere.html">Home page</a>
</center>
</body>
</html>
Codice della JSP inclusa nella precedente
<%@ page import="controller.IngrController" %>
<%@ page import="java.sql.*" %>
<SCRIPT LANGUAGE="JavaScript">
<!--
function selezionato(obj) {
//permette solo numeri
nuovaSoglia = obj.value.replace(/\D/g,"");
obj.value = nuovaSoglia;
if(obj.value > 0)
document.modrimanenza.totale_selezionati.value = parseInt(document.modrimanenza.totale_selezionati.value) + 1;
if(obj.value <= 0)
document.modrimanenza.totale_selezionati.value = parseInt(document.modrimanenza.totale_selezionati.value) - 1;
}
function checkForm() {
if (document.modrimanenza.totale_selezionati.value == 0)
return false;
else
return true;
}
//-->
</script>
<%
int i=0;
String lettera = request.getParameter("which");
ResultSet rs = IngrController.getIngrMagPerLettera(lettera);
%>
<center>
<form name="modrimanenza" action="ModificaRimanenza" method="post">
<table width="550" cellpadding="2">
<tr>
<td width="25%"><b>Ingrediente</b></td>
<td width="20%"><b>Unità di misura </b></td>
<td width="25%"><div align=center><b>Soglia attuale </b></div></td>
<td width="30%"><b>Nuovo valore di soglia </b></td>
</tr>
<% while (rs.next()) { %>
<tr>
<td><%=rs.getString("Nome") %></td>
<td><div align="center"><%=rs.getString("unitaDiMisura") %></div></td>
<td><div align="center"><%=rs.getString("Soglia") %></div></td>
<td><div align="center"><input type="text" name="ingrediente<%= i %>value" size="3" value="0" onChange="selezionato(this)"/></div>
<input type="hidden" name="ingrediente<%= i %>name" value="<%=rs.getString("Nome") %>" /></td>
</tr>
<% i++;
} %>
<tr>
<td> </td>
<td> </td>
<td><input type="hidden" name="totale_selezionati" value="0"/> </td>
<td><div align="center"><input type="submit" name="modifica" value="Modifica" onClick="return checkForm()"/></div></td>
</tr>
</table>
</form>
</center>
Metodo doPost della servlet associata alla precedente JSP
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int daModificare = Integer.parseInt(request.getParameter("totale_selezionati")); //numero di ingredienti con quntità scelta > 0
int j = 0; //conta gli ingredienti con quantità > 0 trovati
int aux = 0; //cicla su tutti gli ingredienti nel form
String[][] ingrediente = new String[daModificare][2];
while (j < daModificare) { //finché il numero di ingredienti con quantità > 0 trovati non raggiunge il valore conosciuto
if(Integer.parseInt(request.getParameter("ingrediente"+aux+"value")) > 0) {
ingrediente[j][0] = request.getParameter("ingrediente"+aux+"name");
ingrediente[j][1] = request.getParameter("ingrediente"+aux+"value");
j++;
aux++;
}
else
aux++;
}
IngrController.modificaSogliaRimanenza(ingrediente,daModificare);
RequestDispatcher dispatcher = request.getRequestDispatcher("/modificasoglia.jsp");
dispatcher.forward(request, response);
}
Il form coi radio button non ha servlet associate.
EDIT: ops, mi sono accorto di aver sbagliato sezione, non avevo visto quella er le JSP. Chiedo scusa e chiedo ad un moderatore di spostare il thread.