【注】以下內容由 JSP 腳本代碼書寫,可完全由 EL 表達式代替。
問題描述:
當判斷出用戶輸入的 "密碼錯誤" 或 "用戶不存在" 返回登錄界面后,默認情況下,輸入框會被清空,那該如何保留用戶輸入的信息呢?
運用方法:
1、服務器把獲取到的表單數據保存至 request 域中,然后請求轉發回登錄界面;
2、登錄界面(JSP)獲取 request 域中的內容,使其成為 <input> 標簽的 value 屬性值。
不足之處:
使用 "請求轉發" 返回登錄頁面,會導致地址欄仍保留 Servlet 的地址。
實現步驟:
如:登錄頁面 ( Login.jsp ) 把表單提交到服務器 ( LoginServlet ) 中,獲取到的參數分別為:username, password,那么:
1、LoginServlet:
1 request.setAttribute( "usernameInput", username ); // 保存輸入的用戶名 2 3 request.setAttribute( "passwordInput", password ); // 保存輸入的密碼 4 5 request.getRequestDispatcher( "Login.jsp" ).forward( request, response ); // 請求轉發至登錄頁面
2、Login.jsp:
1 <% 2 String usernameInput = ""; // 防空處理 4 5 String passwordInput = ""; // 防空處理 6 7 if( request.getAttribute( "usernameInput" ) != null ) 8 9 { 10 11 usernameInput = ( String ) request.getAttribute( "usernameInput" ); // 獲取 request 域中保存的用戶名輸入 12 13 passwordInput = ( String ) request.getAttribute( "passwordInput" ); // 獲取密碼輸入 14 15 } 16 17 %> 18 19 <!-- 替換輸入框的 value 值 --> 20 21 <form method = " POST " action = " /XXX項目/LoginServlet "> 22 23 <input type = " text " value = " <%= usernameInput %> " /> 24 25 <input type = "password" value = " <%= passwordInput %> " /> 26 27 </form>

問題追加:
之前用 Session 域保存,好像每次顯示的都是上一次的輸入。
猜測:Session 域是在獲取的時候才進行保存?所以會慢一拍? (經測試,沒有出現該錯誤)
所以,使用 session 域保存輸入,再重定向回登錄頁面,可以實現保留輸入和地址欄不變兩開花(頁面獲取到域信息后,應刪除域信息)。
