JSTL和c:测试条件时

时间:2012-12-27 20:21:51

标签: java jsp servlets jstl

如何检查并使用userLoggedIn来证明条件。 我是新人,我有很多搜索。必须有一个愚蠢的错误。

的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("guest@guest.com") && 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");
}

1 个答案:

答案 0 :(得分:7)

您需要将信息存储在所需的范围内,这通常是登录用户的会话范围。

userLoggedIn = 1;之后添加以下行。

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

这基本上只需要改变。


对具体问题

无关,这个int(和BevynQ评论的boolean)方法相当“原始”。您通常会在会话中存储从DB获取的整个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>