2012-12-27 26 views
5

我該如何檢查和使用userLoggedIn來驗證條件。 我是新來的,我有很多搜索。肯定有一個愚蠢的錯誤。JSTL和c:當測試條件

的index.jsp

<div id="sign-in"> 
    <c:choose> 
     <c:when test="${userLoggedIn == 1}"> 
      Welcome <c:out value="${loginID}" /> | Logout 
     </c:when> 
     <c:otherwise>Log-in</c:otherwise> 
    </c:choose> 
</div> 

一些驗證的servlet

int userLoggedIn = 0; 

if(loginID.equals("[email protected]") && password.equals("guest")){ 
    userLoggedIn = 1; 
    getServletContext().getRequestDispatcher("/index.jsp").forward(request, response); 
    //  out.println("login successful"); 

} else { 
    // getServletContext().getRequestDispatcher("/login.jsp").forward(request, response); 
    out.println("login failed"); 
} 
+0

其所有屬性的輕鬆訪問有什麼問題? –

+1

爲什麼userLoggedIn不是布爾值? – BevynQ

回答

7

您需要存儲在所需範圍內的信息,這通常是情況下的會話範圍登錄用戶。

添加以下行userLoggedIn = 1;

request.getSession().setAttribute("userLoggedIn", userLoggedIn); 

這基本上都是你需要改變的。


無關到混凝土的問題,這int(和boolean由BevynQ爲註釋)的方法是相當 「原始的」。您通常會將從數據庫中獲取的整個User實體存儲在會話中。例如。

User user = userService.find(username, password); 

if (user != null) { 
    request.getSession().setAttribute("user", user); 
    response.sendRedirect("home"); 
} else { 
    request.setAttribute("message", "Unknown login, please try again"); 
    request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); 
} 

<c:when test="${not empty user}"> 

允許像

<p>Welcome, <c:out value="${user.name}" /></p> 
+0

還需要在JSTL中以如下方式訪問: - '$ {sessionScope.userLoggedIn}' –

+2

@Rohit:這是不必要的。請閱讀一個理智的JSP/Servlet教程。只有當您碰巧在頁面或請求範圍中具有相同的屬性時,這種方法纔是必需的,畢竟這是純粹的糟糕設計。另見http://stackoverflow.com/tags/el/info – BalusC

+0

@BalusC ..哦,是的。我忘了該屬性會自動按順序搜索。 –