programacion libros ejemplos ejemplo directivas jsp servlets jstl

jsp - libros - Recopile y guarde los valores enviados de múltiples entradas HTML dinámicas en el servlet



jsp pdf (1)

Puedo mostrar una ArrayList de beans en un formulario JSP usando JSTL al recorrer la lista y generar las propiedades de bean en una etiqueta de entrada HTML.

<c:forEach items="${listOfBeans}" var="bean"> <tr> <td><input type="text" id="foo" value="${bean.foo}"/></td> <td><input type="text" id="bar" value="${bean.bar}"/></td> </tr> </c:forEach>

¿Cómo codifico el JSP para que cuando la página se envíe, los valores actualizados estén en el elemento apropiado de ArrayList ?


Dado este modelo simplificado:

public class Item { private Long id; private String foo; private String bar; // ... }

Así es como puede hacerlo siempre que ${items} sea List<Item> :

<c:forEach items="${items}" var="item"> <tr> <td> <input type="hidden" name="id" value="${item.id}" /> <input name="foo_${item.id}" value="${fn:escapeXml(item.foo)}" /> </td> <td> <input name="bar_${item.id}" value="${fn:escapeXml(item.bar)}" /> </td> </tr> </c:forEach>

(tenga en cuenta la importancia de fn: escapeXml () como prevención de ataques XSS )

Entonces, básicamente, debe establecer el identificador único del elemento como un campo de entrada oculto en cada fila como se muestra en el fragmento anterior:

<input type="hidden" name="id" value="${item.id}" />

Y a su vez, debe usar esta id como sufijo del name de todos los campos de entrada en la misma fila, como:

<input name="foo_${item.id}" ... />

En el servlet, puede recopilar todos los valores de <input type="hidden" name="id" ...> de todas las filas mediante request.getParameterValues() . Simplemente haga un bucle sobre él y luego tome las entradas individuales por id .

for (String id : request.getParameterValues("id")) { String foo = request.getParameter("foo_" + id); String bar = request.getParameter("bar_" + id); // ... }

También puede hacer todo esto sin esa id y tomar todas las entradas por nombre como una matriz como name="foo" y request.getParameterValues("foo") , pero el orden de los parámetros de solicitud no está bajo su control. Los formularios HTML lo enviarán en orden, pero el usuario final puede manipularlo fácilmente.

No hay necesidad de desorden JavaScript aquí.

Ver también: