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í.