Comment puis-je conserver les valeurs des champs du formulaire HTML dans JSP après avoir envoyé le formulaire à Servlet?

après avoir soumis des données dans le HTML de, un servlet ajoute ces données à mon DB et transmet un message de résultat à une page JSP. Je veux conserver les valeurs initialement soumises dans la forme après le forward.

est-il raisonnable de faire un objet dans un servlet et d'ajouter tous les paramètres que je reçois et de l'envoyer avec une requête à JSP? Y a-t-il un autre meilleur moyen?

5
demandé sur BalusC 2010-10-15 01:11:47

2 réponses

vous pouvez accéder aux paramètres des requêtes à valeur unique par ${param} .

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
...
<input name="foo" value="${fn:escapeXml(param.foo)}">
<textarea name="bar">${fn:escapeXml(param.bar)}</textarea>
...
<input type="radio" name="faz" value="a" ${param.faz == 'a' ? 'checked' : ''} />
<input type="radio" name="faz" value="b" ${param.faz == 'b' ? 'checked' : ''} />
<input type="radio" name="faz" value="c" ${param.faz == 'c' ? 'checked' : ''} />
...
<select name="baz">
    <option value="a" ${param.baz == 'a' ? 'selected' : ''}>label a</option>
    <option value="b" ${param.baz == 'b' ? 'selected' : ''}>label b</option>
    <option value="c" ${param.baz == 'c' ? 'selected' : ''}>label c</option>
</select>

notez que la JSTL fn:escapeXml() est nécessaire afin d'empêcher les attaques XSS. Voir aussi XSS prevention in JSP / Servlet web application .

vous pouvez accéder aux paramètres des requêtes multi-valeurs par les flux ${paramValues} et EL 3.0.

<input type="checkbox" name="far" value="a" ${paramValues.far.stream().anyMatch(v->v == 'a').get() ? 'checked' : ''} />
<input type="checkbox" name="far" value="b" ${paramValues.far.stream().anyMatch(v->v == 'b').get() ? 'checked' : ''} />
<input type="checkbox" name="far" value="c" ${paramValues.far.stream().anyMatch(v->v == 'c').get() ? 'checked' : ''} />
...
<select name="boo" multiple>
    <option value="a" ${paramValues.boo.stream().anyMatch(v->v == 'a').get() ? 'selected' : ''}>label a</option>
    <option value="b" ${paramValues.boo.stream().anyMatch(v->v == 'b').get() ? 'selected' : ''}>label b</option>
    <option value="c" ${paramValues.boo.stream().anyMatch(v->v == 'c').get() ? 'selected' : ''}>label c</option>
</select>
12
répondu BalusC 2017-05-23 12:00:55

pour la déclaration select, vous pouvez peut-être utiliser javascript.

document.getElementById('baz').value = '${param.baz}';

2
répondu Afdzal Kamal 2016-08-04 09:05:26