在HTML表单中提交数据后,servlet将这些数据添加到我的数据库中,并向JSP页面转发结果消息。我想在转发后保留表单中最初提交的值。
是否明智在servlet中创建一个对象,将我收到的所有参数添加到其中,并使用请求将其发送到JSP?是否有其他更好的方法?
是否明智在servlet中创建一个对象,将我收到的所有参数添加到其中,并使用请求将其发送到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.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>
对于选择语句,您可以使用JavaScript。
document.getElementById('baz').value = '${param.baz}';
${param.foo == 'E' ? 'checked' : ''}
。我更新了答案并添加了更多示例。 - BalusCescapeXml()
将对它们进行转义。删除它并重新测试。您会发现脚本将被执行。 - BalusC