在提交HTML中的數據之後,servlet會將這些數據添加到我的數據庫中,並將結果消息轉發給JSP頁面。我希望在轉發後保留最初提交的值。將表單提交給Servlet後,如何在JSP中保留HTML表單域值?
在servlet中創建一個對象並添加我收到的所有參數並將它發送給JSP請求是否明智?還有更好的方法嗎?
在提交HTML中的數據之後,servlet會將這些數據添加到我的數據庫中,並將結果消息轉發給JSP頁面。我希望在轉發後保留最初提交的值。將表單提交給Servlet後,如何在JSP中保留HTML表單域值?
在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()
是必要的。另見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>
對於select語句也許你可以使用javascript。
document.getElementById('baz').value = '${param.baz}';
它的工作原理與文本的Fileds但我如果我想與和值,例如是靜態的:價值=」?E」 – palAlaa 2010-10-14 22:42:28
有條件地渲染'checked' 。例如'$ {param.foo =='E'?'checked':''}'。我用更多的例子更新了答案。 – BalusC 2010-10-14 22:44:45
它的工作原理謝謝你,關於xss,我試圖爲所有參數對於所有的jsp頁面,我認爲這可能比檢查每個輸入更容易,我可以知道你對此的看法嗎? – palAlaa 2010-10-14 22:59:01