jsp - tutorial - ¿Qué valor envía la etiqueta de casilla de verificación struts cuando la casilla no está seleccionada?
struts html tags (3)
Me encontré con este escenario.
class MyForm extends IdSelectionForm {
private Boolean approveIt = true;
.....
}
mi formulario JSTL consiste en
<html:checkbox property="approveIt" styleId="style1" value="true"/>
Cuando selecciono la casilla de verificación y enviar. En la acción struts obtengo el valor verdadero establecido para este campo. Y otra vez cuando lo desactivo y envío. Entonces también obtengo un verdadero valor. Me pregunto si es algo con valor predeterminado. Debería ser anulado por falso cuando desactivo.
Estaba teniendo el mismo problema. El problema persistió incluso después de que la variable booleana se inicializara en falso.
El problema era que mi alcance era la session
.
Al cambiar el alcance para request
todo funciona como se esperaba.
El atributo de value
contiene el valor utilizado por la etiqueta y no tiene nada con el estado de la checkbox
, si está checked
o no.
En el envío, solo se pasan las casillas marcadas. Entonces Struts los atrapa y establece las propiedades de bean correspondientes por nombre.
Si inicializa el valor en línea o en el constructor, solo las casillas checked
se actualizarán configurando un valor de propiedad de frijol. No puede actualizar el estado no verificado.
Por lo tanto, no establezca ningún valor antes de que se llene el formulario. Si el valor no está establecido, Struts trata ese valor como false
y lo quita checked
de la etiqueta. Esto es equivalente al establecer el valor en false
explícitamente.
El comportamiento contrario con el valor true
pero checkbox no tiene un estado para los otros valores como null
lugar de true
o false
que corresponde al estado de la casilla de verificación checked
o no (sin el atributo checked
).
En primer lugar, <html:checkbox>
es una etiqueta Struts, no una etiqueta JSTL. Esta etiqueta simplemente genera una entrada HTML estándar de tipo casilla de verificación. Y las casillas de verificación HTML envían su valor como valor del parámetro cuando están marcadas, y no envían ningún parámetro cuando están desmarcadas.
Entonces, dado que el valor predeterminado de su campo de formulario es verdadero:
- si la casilla de verificación está marcada, se establecerá en verdadero por Struts
- si la casilla de verificación está desmarcada, Struts no lo configurará en nada y, por lo tanto, mantendrá su valor predeterminado: true
El valor predeterminado de la propiedad approveIt
debe ser falso. De esta forma, si la casilla de verificación está desmarcada, mantendrá su valor predeterminado (falso), que es correcto. Y si la casilla de verificación está marcada, se establecerá en verdadero, que también es correcto.