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

问题描述 投票:0回答:2

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

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

forms jsp servlets retain
2个回答
14
投票

您可以通过

${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 eq 'a' ? 'checked' : ''} />
<input type="radio" name="faz" value="b" ${param.faz eq 'b' ? 'checked' : ''} />
<input type="radio" name="faz" value="c" ${param.faz eq 'c' ? 'checked' : ''} />
...
<select name="baz">
    <option value="a" ${param.baz eq 'a' ? 'selected' : ''}>label a</option>
    <option value="b" ${param.baz eq 'b' ? 'selected' : ''}>label b</option>
    <option value="c" ${param.baz eq 'c' ? 'selected' : ''}>label c</option>
</select>

请注意,JSTL's

fn:escapeXml()
对于防止 XSS 攻击是必要的。另请参阅 JSP/Servlet Web 应用程序中的 XSS 预防

您可以通过

${paramValues}
和EL 3.0流访问多值请求参数。

<input type="checkbox" name="far" value="a" ${paramValues.far.stream().anyMatch(v -> v eq 'a').get() ? 'checked' : ''} />
<input type="checkbox" name="far" value="b" ${paramValues.far.stream().anyMatch(v -> v eq 'b').get() ? 'checked' : ''} />
<input type="checkbox" name="far" value="c" ${paramValues.far.stream().anyMatch(v -> v eq 'c').get() ? 'checked' : ''} />
...
<select name="boo" multiple>
    <option value="a" ${paramValues.boo.stream().anyMatch(v -> v eq 'a').get() ? 'selected' : ''}>label a</option>
    <option value="b" ${paramValues.boo.stream().anyMatch(v -> v eq 'b').get() ? 'selected' : ''}>label b</option>
    <option value="c" ${paramValues.boo.stream().anyMatch(v -> v eq 'c').get() ? 'selected' : ''}>label c</option>
</select>

这一切的替代方法是通过 Ajax 提交表单,然后仅更新验证消息。从这里开始:我应该如何使用 servlet 和 Ajax?


3
投票

对于 select 语句,也许你可以只使用 javascript。

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

© www.soinside.com 2019 - 2024. All rights reserved.