【问题标题】:JSTL and c:when test conditionJSTL 和 c:when 测试条件
【发布时间】:2012-12-13 04:54:53
【问题描述】:

我如何检查和使用 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");
}

【问题讨论】:

  • 为什么 userLoggedIn 不是布尔值?

标签: java jsp servlets jstl


【解决方案1】:

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

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

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

这基本上就是您需要更改的全部内容。


与具体问题无关,这种int(以及BevynQ 评论的boolean)方法相当“原始”。您通常将从数据库中获得的整个 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>

【讨论】:

  • 还需要在JSTL中访问为:-${sessionScope.userLoggedIn}
  • @Rohit:没必要。请阅读理智的 JSP/Servlet 教程。仅当您碰巧在页面或请求范围中也具有相同的属性时,才需要这种方法,这毕竟是糟糕的设计。另见stackoverflow.com/tags/el/info
  • @BalusC .. 哦,是的。我忘了属性会自动按顺序搜索。
猜你喜欢
  • 1970-01-01
  • 2011-11-02
  • 2011-11-18
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多