..並重定向到同一個JSP頁面..
你不應該在這兒火重定向,但向前。即不做
response.sendRedirect("page.jsp");
而是做
request.getRequestDispatcher("page.jsp").forward(request, response);
這樣的原始請求仍然活着,包括所有的參數和屬性。重定向指示客戶發出全新的請求,特此提供初始請求。
在JSP可以通過${param}
在EL訪問請求參數,並且可以訪問請求屬性與${attributeKey}
相同的方式,其中attributeKey
是您已用於設置在請求範圍的對象在servlet如下屬性鍵:
request.setAttribute("attributeKey", someObject);
至於在JSP保留HTML的輸入值,你只需要在請求參數值設置相應的<input>
元素的value
attribtue:
<input name="foo" value="${param.foo}">
這將在模板文本中輸出request.getParameter("foo")
的結果。這有一個但是風險XSS,更是逃避與JSTL的fn:escapeXml()
幫助任何用戶控制輸入如下:
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
...
<input name="foo" value="${fn:escapeXml(param.foo)}">
保留在下拉列表中選擇的選項是有點不同的故事。您基本上需要設置<option>
元素的selected
屬性。假設你通常會這樣做 - 使用JSTL的<c:forEach>
標籤來顯示Map<String, String>
或List<JavaBean>
的選項值,可以按如下方式解決它(假設${countries}
是Map<String, String>
,您已將其作爲屬性放置在請求,會話或應用範圍):
<select name="country">
<c:forEach items="${countries}" var="country">
<option value="${country.key}" ${country.key == param.country ? 'selected' : ''}>${country.value}</option>
</c:forEach>
</select>
此打印selected
屬性在當前迭代選項鍵等於在請求參數地圖提交的一個。
你的意思是查詢字符串參數? – Affe 2010-06-03 16:26:02
不,我的意思是請求範圍的屬性。我想保持查詢字符串儘可能簡短。 – ssahmed555 2010-06-03 17:15:18
你可以從JSP發佈表單代碼嗎? – Michael 2010-06-03 20:27:30