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

时间:2010-10-14 21:11:48

标签: forms jsp servlets retain

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

在servlet中创建一个对象并添加我收到的所有参数并将其发送给JSP是否明智?还有另一种更好的方法吗?

2 个答案:

答案 0 :(得分:12)

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

请注意,JSTL的fn:escapeXml()是必要的,以防止XSS攻击。另见XSS prevention in JSP/Servlet web application

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

答案 1 :(得分:2)

对于select语句,您可以只使用javascript。

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