将表单提交给Servlet后,如何在JSP中保留HTML表单字段值?

在从HTML提交数据之后,servlet将这些数据添加到我的数据库,并将结果消息转发到JSP页面。 我想在转发之后保留最初提交的值。

在servlet中创build一个对象并添加所有我收到的参数并发送请求到JSP是否明智? 还有更好的方法吗?

您可以通过${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> 

请注意,为了防止XSS攻击,JSTL的fn:escapeXml()是必要的。 另请参阅JSP / Servlet Web应用程序中的XSS预防 。

您可以通过${paramValues}和EL 3.0stream访问多值请求参数。

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

对于select语句也许你可以使用JavaScript。

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