2011-07-24 10 views
7

Esto es más una pregunta lógica. Tengo una casilla de verificación en una página web y almaceno su valor de los parámetros de solicitud de servlet en un objeto booleano (Java). La lógica es que si el parámetro de solicitud para la casilla de verificación no es nulo, haga que el objeto sea verdadero; de lo contrario, será nulo. Cuando se vuelve a llamar a la página, marca la casilla de verificación como "marcada" si su valor almacenado es verdadero.Cómo establecer/obtener valores de casillas de verificación de un servlet dinámicamente

this.checkbox = (servlet.getParameter("checkbox")!=null && servlet.getParameter("checkbox").contentEquals("on"))?true:null; 

El problema comienza cuando persisto ese objeto de casilla de verificación. Primero llene la página con los datos persistentes y luego la llene con los valores del servlet. Si el valor de la casilla de verificación se almacena como verdadero en la base de datos, y el usuario lo desmarca en la página y lo envía, dado que el parámetro de servlet para la casilla de verificación se vuelve nulo, no puedo hacer que la casilla de verificación sea nula. Por lo tanto, la casilla de verificación siempre muestra el valor persistente ya que nunca se sobrescribe. Entonces, ¿alguien puede sugerir algún cambio lógico en cómo estoy llenando el valor del objeto?

+2

Una variable booleana debe ser verdadera o falsa, no verdadera o nula. –

Respuesta

17

La única prueba válida para la casilla de verificación es ver si getParameter() devuelve o no.

Si el valor de retorno es null no está marcado, de lo contrario, está marcado.

Tenga en cuenta que el atributo checked debe estar presente si desea marcar la casilla de verificación en la presentación de la primera página y no debe estar presente en absoluto si desea que se desmarque. El valor del parámetro siempre debe ser checked, como en el ejemplo siguiente.

<label> 
    <input 
    type="checkbox" 
    id="cb_id" 
    name="cb_id" 
    value="cb_id_value" 
    checked="checked" 
    /> 
    My label 
</label> 

Para este ejemplo, es posible que esta lógica en el código de procesamiento servlet:

HTTPServetRequest request = ...; 

boolean cbState = request.getParameter("cb_id") != null; 

Tenga en cuenta, que si la casilla de verificación está marcada por el usuario en el ejemplo anterior getParameter volverá "cb_id_value", pero porque generalmente tiene una sola casilla de verificación con un nombre dedicado, no tiene que verificar el valor.

Por cierto, he notado en su ejemplo que está usando servlet en . Espero que en tu sistema sea un apodo para HTTPServletRequest.

+0

¿Recuperas el parámetro por nombre o por ID? Además, ¿por qué no es posible usar '' request.getParameterValues ​​(..) ''? –

0

Parece que es posible que no persista un valor cambiado del campo de casillas de verificación, o que tenga cierta confusión en el manejo de los valores nulos que hacen que el campo siempre se muestre como marcado.

Intente asegurarse de que el campo de su base de datos siempre contenga un booleano válido, configurando el campo para que no permita valores nulos y tenga un valor predeterminado apropiado.

Al enviar el formulario, debe actualizar el valor de la base de datos a true si la casilla está marcada y false de lo contrario.

Al mostrar el formulario, debe incluir el atributo "marcado" en la etiqueta solo si el valor de la base de datos es true.

Cuestiones relacionadas