jsp - tutorial - jstl



Recueillir et sauvegarder les valeurs soumises de plusieurs entrées HTML dynamiques dans le servlet (1)

Étant donné ce modèle simplifié:

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

Voici comment procéder: ${items} est 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>

(notez l'importance de fn: escapeXml () en tant que prévention d'attaque XSS )

Donc, en gros, vous devez définir l'identifiant unique de l'élément en tant que champ de saisie masqué dans chaque ligne, comme indiqué dans l'extrait ci-dessus:

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

Et vous devez à son tour utiliser cet id comme suffixe du name de tous les champs de saisie de la même ligne, tels que:

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

Dans le servlet, vous pouvez collecter toutes les valeurs de <input type="hidden" name="id" ...> de toutes les lignes de request.getParameterValues() . Bouclez simplement dessus, puis saisissez les entrées individuelles par id .

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

Vous pouvez également faire tout cela sans cet id et récupérer toutes les entrées par leur nom sous forme de tableau, comme name="foo" et request.getParameterValues("foo") , mais le classement des paramètres de requête n'est pas sous votre contrôle. Les formulaires HTML l'enverront dans l'ordre, mais l'utilisateur final pourra facilement manipuler l'ordre.

Pas besoin de désordre JavaScript ici.

Voir également:

Je peux afficher une ArrayList de beans dans un formulaire JSP à l'aide de JSTL en parcourant la liste et en affichant les propriétés du bean dans une balise 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>

Comment coder le fichier JSP afin que, lorsque la page est soumise, les valeurs mises à jour figurent dans l'élément approprié de la liste de ArrayList ?





jstl