JSP (Java Server Page) - problemacon checkbox

 
Vista:

problemacon checkbox

Publicado por yeyo (26 intervenciones) el 07/02/2007 12:13:21
Hola a todos. Tengo una aplicación basada en struts. Estoy intentando registrar un vehiculo en mi base de datos. El vehiculo tendrá un equipamiento que selecciono mediante casillas de verificacion. El código de mi jsp es:

<%@ taglib uri="/bean" prefix="bean" %>
<%@ taglib uri="/html" prefix="html" %>
<%@ taglib uri="/logic" prefix="logic" %>
<%@ taglib uri="/template" prefix="template" %>

<br/>
<html:errors/>
<br/>

<table cellpadding="2">
<html:form action="/nuevoVehiculo.do" focus="nif">
<tr>
<td align="right">
<b>Marca:</b>
</td>
<td>
<html:text property="marca" size="10"/>
</td>
</tr>
<tr>
<td align="right">
<b>Modelo:</b>
</td>
<td>
<html:text property="modelo" size="30"/>
</td>
</tr>
<tr>
<td align="right">
<b>Versión:</b>
</td>
<td>
<html:text property="version" size="30"/>
</td>
</tr>
<tr>
<td align="right">
<b>Acabado:</b>
</td>
<td>
<html:text property="acabado" size="30"/>
</td>
</tr>
<tr>
<td>
<b>Equipamiento:</b>
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="ABS" value="Yes">
<b>ABS</b>
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="ESP" value="Yes">
<b>ESP</b>
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="TCS" value="Yes">
<b>Control de tracción</b>
</td>
</tr>


<tr>
<td>
<html:submit value="Registrar Vehiculo"/>
</td>
</tr>

</html:form>
</table>

Desde aqui voy una clase de acción donde recupero los datos del formulario que posteriormente serán introducidos en la base de datos. El problema está a la hora de recuperar los datos del equipamiento, hago lo siguiente:

String equipamiento="";

if(request.getParameter("ABS").equals("Yes"))
{
equipamiento = "ABS";
}

if(request.getParameter("ESP").equals("Yes"))
{
equipamiento = equipamiento + "," + "ESP";
}

if(request.getParameter("TCS").equals("Yes"))
{
equipamiento = equipamiento + "," + "TCS";
}

vehiculo.setEquipamiento(equipamiento);

A la hora de ejecutar, si selecciono los tres elementos de equipamiento no hay problema, pero si dejo alguno sin seleccionar me da un error java.langNullPointerException en la linea if(request...) de aquel que no haya seleccionado. No se a que puede deberse, porque teoricamente si no ha sido marcado se saltaría el if y pasaría a evaluar el siguiente. Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problemacon checkbox

Publicado por Gonzalo (72 intervenciones) el 07/02/2007 23:15:34
El asunto es que cuando no marcas un checkbox, no se envía.

Es decir, si tienes un
<input type="checkbox" name="TCS" value="Yes">
y lo marcas, al enviarse te llegará un parámetro llamado TCS con valor "Yes". Pero si no lo marcas, no se envía el parámetro TCS vacío. Simplemente no se manda.

Tienes dos soluciones fáciles.

Una es cambiar las comprobaciones a:
if(request.getParameter("TCS") != null && request.getParameter("TCS").equals("Yes")) {
····equipamiento = equipamiento + "," + "TCS";
}
Es decir, antes de mirar si vale Yes, miras si tienes ese parámetro. Si no lo tienes pues nada, es que no se ha marcado.

La otra opción es tener en tu formulario los tres checkbox con el mismo nombre:
<input type="checkbox" name="Equipamiento" value="ABS">
<input type="checkbox" name="Equipamiento" value="ESP">
<input type="checkbox" name="Equipamiento" value="TCS">

Si lo haces así, en tu acción podrías hacer algo como:

String Equipamiento = "";
if ( request.getParameter("Equipamiento") != null) {
····String[] extras = request.getParameterValues("Equipamiento");
····for (int i = 0; i< extras.length-1; i++) Equipamiento += extras[i] + ",";
····Equipamiento += extras[extras.length-1];
}

En cualquier caso, como ves, primero tienes que comprobar que sea distinto de null, porque si no se marca ninguno, no te llega ningún parámetro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problemacon checkbox

Publicado por yeyo (3 intervenciones) el 09/02/2007 13:40:50
Muchas gracias por tus sugerencias Gonzalo, la verdad es que con la segunda solución se simplifica todo bastante.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar