How can I retain HTML form field values in JSP after submitting form to Servlet?

前端 未结 2 1389
北荒
北荒 2020-11-22 06:54

After submitting data in the HTML from, a servlet adds these data to my DB and forwards a result message to a JSP page. I want to retain the initially submitted values in th

相关标签:
2条回答
  • 2020-11-22 07:18

    For the select statement maybe you can just use javascript.

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

    0 讨论(0)
  • 2020-11-22 07:24

    You could access single-value request parameters by ${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>
    

    Do note that JSTL's fn:escapeXml() is necessary in order to prevent XSS attacks. See also XSS prevention in JSP/Servlet web application.

    You could access multi-value request parameters by ${paramValues} and EL 3.0 streams.

    <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>
    
    0 讨论(0)
提交回复
热议问题