2014-02-08 76 views
0

如果用戶登錄失敗,我寫了一個代碼來顯示錯誤消息。小服務程序代碼如下:無法在瀏覽器窗口中查看警報

HttpSession session = request.getSession(true); 


/*User class is a Java bean with an isValid attribute*/ 
    User user= new User(); 
    if (!user.isValid()) { 
     request.setAttribute("errorMessage"," Invalid Parameters!"); 
     request.getRequestDispatcher("RegistrationPage.jsp").forward(request, response); 
    } 



// RegistrationPage.jsp file code snippet is below 


<script> 
function loginFailure() { 
      System.out.println("Invalid parameters"); 
      if(request.getParameter("errorMessage") != null) { 
       alert("<%= request.getParameter("errorMessage") %>");   
      } 

</script> 

<body onload="loginFailure()"> 
</body> 

我不明白爲什麼頁面在登錄失敗時不顯示警告消息。它確實進入了loginFailure的方法和alert函數。

+1

它不應該是'的getAttribute( 「的errorMessage」)'你scriplet? –

回答

1

首先,正如@PM 77-1所說,你需要做getAttribute()而不是getParameter()。另外,難道你不想System.out只有在條件爲真時才能執行?但更大的問題是,你正在混合你的Java和JavaScript。您的條件if(request.getParameter("errorMessage") != null)(大概意味着作爲Java代碼在服務器端執行)不在scriptlet標記內,所以JavaScript解釋器會嘗試執行它並失敗。看起來像你想要做的是這樣的:

<script> 
function loginFailure() {<% 
      if(request.getParameter("errorMessage") != null) { 
       System.out.println("Invalid parameters"); 
       %> 
       alert("<%= request.getAttribute("errorMessage") %>"); 
       <%  
      }%> 
</script> 

這是最簡單的修復方法。儘管你並不真正想要將服務器端和客戶端代碼混合在一起(即將任何Java代碼放入JavaScript函數中)。最好在函數外部定義一個var errorMessage,如var errorMessage="<%=request.getAttribute("errorMessage")==null?"":request.getAttribute("errorMessage").toString()%>",然後使用JavaScript條件語句(而不是Java,因爲看起來您正在嘗試這樣做)只在其長度大於零時警告錯誤消息。

0
Scriptlet and javascript to display this message: 
<% 
      String message = (String) request.getAttribute("errorMessage"); 
      if (message != null) { 
      %> 
       <script> 
        alert('<%=message%>'); 
       </script> 
      <% 
      }else{ 

      %> 
      <script> 
       alert("Login Successfull"); 

      </script> 
     <%  
      } 
     %> 
相關問題