verificacion selección programar opcion múltiple lista formulario ejemplos ejemplo cuadro control casilla boton alternancia java html spring spring-mvc freemarker

java - selección - Los valores de casilla de verificación no se unen al objeto cuando son falsos?



cuadro de lista de selección múltiple access (3)

Creo que deberías usar etiquetas Springframework. ¿Por qué estás usando html simple? Si su vista es una página JSP simplemente importe:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

y luego puedes usar:

<form:checkbox path="path" label="label" />

que maneja el problema

Usé ModelAttribute para vincular el objeto en la aplicación web Spring.

Una vez que noto que, en caso de que un objeto tenga un valor booleano A es verdadero, su valor no se actualizará si desmarcamos la casilla de verificación de A.

Por ejemplo, tengo un objeto Lesson que tiene el atributo "active" = true. En la vista "Editar lección", hago una casilla que se une a "activa". Las cosas funcionan bien si la casilla de verificación está marcada (el objeto de enlace refleja los cambios), pero la lección de objeto no cambiará si deseleccionamos la casilla de verificación.

El estudio adicional me dice que eso se debe a que el valor de la casilla de verificación puede no ser enviado por el navegador (este es un diseño de HTML). Así que tengo que usar feo request.getParameter para verificar si el valor está establecido.

Acabo de recibir esta pregunta , y veo que asp.net mvc proporciona una manera de evitarlo de forma más elegante. Creo que Spring debe proporcionar algo similar. ¿Alguien sabe cómo hacer eso?

Lo siguiente es mi código:

Código del controlador:

@RequestMapping(value="/test", method = RequestMethod.POST) public String processEditLesson(@Valid Lesson lesson, BindingResult bindingResult, Model model) { System.out.println("Lesson is active: " + lesson.isActive()); // still "true" even if the checkbox is unset // Current work-around String isActive = request.getParameter("active"); if (StringUtils.isNotNullOrEmpty(isActive)) { lesson.setActive(true); } else { lesson.setActive(false); } ... }

Ver código:

<form id="lesson" class="EditorForm" action="${rc.getContextUrl(''/test.html'')}" method="post" > <fieldset> <legend><@spring.message code="lesson.edit"/></legend> <@spring.formHiddenInput "lesson.id" /> <@spring.formHiddenInput "lesson.studio.id" /> <div class="Entry"> <label for="name"><@spring.message code="lesson.message"/></label> <@spring.formInput "lesson.message" /> <span class="ErrorMessage"><@spring.showErrors "<br/>" /></span> </div> <input type="checkbox" name="active" checked="checked" /> <label for="active">${rc.getMessage(''lesson.active'')}</label> <input type="submit" value="<@spring.message code=''common.update'' />" /> </fieldset> </form>


Puede usar etiquetas de marco de primavera como si configurara automáticamente el valor seleccionado para la clase de bean y luego será muy fácil obtener su valor en su clase de controlador.

en la ruta que necesita para poner su nombre de variable de frijol

y para usar esto necesita dar el nombre de comando a su formulario y usar ese nombre de comando para vincular su objeto bean a ese jsp

model.addAttribute ("nombre de comando", objeto bean) use esto en su controlador para vincular el objeto.


Spring tiene una solución integrada.

Simplemente agregue este campo oculto adicional al formulario:

<input type="hidden" value="on" name="_active"/>

El parámetro con un guión bajo inicial es un tipo de marcador, para indicar la existencia de un parámetro de casilla de verificación con el mismo nombre, pero sin el guión bajo.

Spring debería establecer ahora lesson.active en falso si solo se _active=on .