【问题标题】:Why JSTL c:set declaration affects my session为什么 JSTL c:set 声明会影响我的会话
【发布时间】:2013-01-19 20:41:14
【问题描述】:

我在我的单页中设置了许多 c:set 声明。我还将我的 roleId 设置为我的会话。现在,当我制作其他 c:set 时,我的会话角色 ID 受到了影响。我确认了这一点,因为我在我的页面中显示了我的会话 ID。登录后我的会话 ID 是正确的,但是当我刷新页面时,我的会话 ID 发生了变化。为什么?这是我的代码

<%@page import="request.RequestDAO"%>
<%@page import="request.RequestItems"%>
<%@include file="/WEB-INF/common/taglibs.jsp"%>
<%@ page import="message.MessageItems"%>
<%@ page import="message.NewMessageDAO"%>
<div id="menu-wrapper">

    <div id="menu">
        <span class="menu-header">Calendar</span>
        <div id="adminCalendar"></div>
    </div>

    <div id="menu">
        <span class="menu-header">Directories <%=((Long) session.getAttribute("role")).longValue()%> </span>
        <ul>
            <li><a href="${pageContext.request.contextPath}/directory/list-of-registered-organizations">Organization </a></li>
            <li><a href="${pageContext.request.contextPath}/directory/list-of-registered-medical-service">Medical Service</a></li>
            <li><a href="${pageContext.request.contextPath}/directory/list-of-registered-evacuation-center">Evacuation Centers</a></li>
            <li><a href="${pageContext.request.contextPath}/directory/list-of-registered-fire-suppression-group">Fire Suppression Groups</a></li>
            <li><a href="${pageContext.request.contextPath}/directory/list-of-registered-medical-facilities">Medical Facilities</a></li>
            <li><a href="${pageContext.request.contextPath}/directory/list-of-registered-rescue-organization">Rescue Organizations</a></li>
            <li><a href="${pageContext.request.contextPath}/directory/list-of-registered-agency">Agency</a></li>
            <li><a href="${pageContext.request.contextPath}/directory/list-of-registered-schools">Schools</a></li>
        </ul>
    </div>
    <c:set var="admin" scope="session" value='<%=((Long) session.getAttribute("role")).longValue()%>' />
    <c:if test="${admin == 121}">
        <div id="menu">
            <span class="menu-header">Registration</span>
            <ul>
                <li><a href="${pageContext.request.contextPath}/registration/organization-registry">Organization Registry </a></li>
                <li><a href="${pageContext.request.contextPath}/registration/emergency-medical-service">Emergency Medical Service Registry</a></li>
                <li><a href="${pageContext.request.contextPath}/registration/register-evacuation-center">Evacuation Centers Registry</a></li>
                <li><a href="${pageContext.request.contextPath}/registration/register-fire-suppression-group">Fire Suppression Group Registry</a></li>
                <li><a href="${pageContext.request.contextPath}/registration/register-medical-facilities">Medical Facilities Registry</a></li>
                <li><a href="${pageContext.request.contextPath}/registration/register-rescue-organizations">Rescue Organizations Registry</a></li>
                <li><a href="${pageContext.request.contextPath}/registration/agency-registration">Agency Registry</a></li>
                <li><a href="${pageContext.request.contextPath}/registration/school-registration">School Registry</a></li>

            </ul>
        </div>
    </c:if>

    <%
        long id = ((Long) session.getAttribute("userId")).longValue();
        MessageItems message = new NewMessageDAO().NewMessages(id);
        RequestItems NewRequest = new RequestDAO().NewRequests(id);
    %>

    <div id="menu">
        <span class="menu-header">User Option</span>
        <ul>
            <li><a href="${pageContext.request.contextPath}/registration/organization-registry">My Account</a></li>
            <li><a href="${pageContext.request.contextPath}/registration/emergency-medical-service">Change Password</a></li>
            <li><a href="${pageContext.request.contextPath}/message/inbox">My Messages

            <c:set var="role" scope="session" value='<%=message.getNewMessages()%>' />
            <c:if test="${role == 0}">
                <li><a href="${pageContext.request.contextPath}/message/inbox">My Messages<label></label></a></li>
            </c:if>
            <c:if test="${role != 0}">
                <li style="font-weight: bold"><a href="${pageContext.request.contextPath}/message/inbox">My Messages <label>(<%=message.getNewMessages()%>)
                    </label></a></li>
            </c:if>

            <li><a href="${pageContext.request.contextPath}/message/new-message">Send Message</a></li>


            <c:set var="role1" scope="session" value='<%=NewRequest.getNewRequest()%>' />
            <c:if test="${role1 == 0}">
                <li><a href="${pageContext.request.contextPath}/request/request-inbox">My Requests<label></label></a></li>
            </c:if>
            <c:if test="${role1 != 0}">
                <li style="font-weight: bold"><a href="${pageContext.request.contextPath}/request/request-inbox">My Requests <label>(<%=NewRequest.getNewRequest()%>)
                    </label></a></li>
            </c:if>
            <li><a href="${pageContext.request.contextPath}/request/new-request">Make Request</a></li>

            <li><a href="${pageContext.request.contextPath}/request/request-inbox">My Requests</a></li>



            <li><a href="${pageContext.request.contextPath}/action/add-user">Add user</a></li>
            <li><a href="${pageContext.request.contextPath}/action/view-all-user">View user</a></li>

        </ul>
    </div>
</div>

【问题讨论】:

  • 在旁注中,您可以将 &lt;a href="${pageContext.request.contextPath}/message/inbox"&gt; 替换为 &lt;a href="&lt;c:url value="/message/inbox"/&gt;"&gt;
  • @KevinBowersox 我还注意到那部分的值变成了会话ID,为什么会这样?

标签: java jsp jakarta-ee servlets jstl


【解决方案1】:

从目前的代码我只能假设是因为这一行

<c:set var="role" scope="session" value='<%=message.getNewMessages()%>' />

当您的页面再次运行时,来自 message.getNewMessages() 的值必须更改。

可能是因为MessageItems message = new NewMessageDAO().NewMessages(id);

但如果没有这些类的代码,就无法判断。

【讨论】:

  • 行 message.getNewMessages() 只返回未读消息的数量...我无法弄清楚问题
  • 那么MessageItems message = new NewMessageDAO().NewMessages(id) 必须改变未读消息的数量。
  • 一行 MessageItems message = new NewMessageDAO().NewMessages(id) 调用根据会话 userId 统计未读消息数的方法。
  • 好吧,如果这不会改变计数,那么它没有理由获得不同的值。你试过调试吗?
猜你喜欢
  • 2012-01-16
  • 1970-01-01
  • 2011-03-24
  • 2013-05-19
  • 1970-01-01
  • 2011-03-06
  • 2011-03-20
  • 2017-11-04
  • 1970-01-01
相关资源
最近更新 更多