【问题标题】:Problem with session attributes in JSP EL using Spring MVC使用 Spring MVC 的 JSP EL 中的会话属性问题
【发布时间】:2011-01-19 01:09:33
【问题描述】:

我正在尝试使用 JSP EL 在 jsp 页面中显示会话属性“userSession”,但它返回 null(案例 1)。请求属性在 EL 表达式中正确显示。

使用 java scriptlet 代替,行为如案例 2 和 3 所示:

  1. <c:out value="${userSession}"/> \\返回 null
  2. <c:out value='<%=request.getSession().getAttribute("userSession")%>'/> \\工作正常 - 返回会话属性
  3. <c:out value='<%=session.getAttribute("userSession")%>'/> \\抛出异常:找不到变量会话

案例 3 的异常可能与案例 1 的问题有关,例如由于某种原因无法识别会话变量,从而影响了 EL 表达式。

我正在使用 Spring MVC 2.5 和 JSTL 1.1.2。

我可以发布任何其他需要澄清问题的内容。

【问题讨论】:

    标签: jsp spring-mvc jstl session-variables el


    【解决方案1】:

    已修复。问题出在我的页面使用的 include.jsp 中发现的 <%@ page session="false" %> 指令,我从那个全局位置删除了该指令。

    它防止 jsp 页面访问会话范围变量。所以只有<%=request.getSession().getAttribute("foo")%> 在这种情况下有效...

    【讨论】:

      【解决方案2】:

      做什么:

      <c:out value="${sessionScope.userSession}"/>
      

      <c:out value="${sessionScope['userSession']}"/>
      

      给?

      【讨论】:

      • &lt;c:out value="${userSession}"/&gt; : null
      • 如上所示尝试 sessionScope 变量。
      • 在打印之前设置会话变量会发生什么:&lt;c:set var="userSession" scope="session" value="Hello"/&gt;?
      • 我收到以下异常:java.lang.IllegalStateException:无法访问不参与任何会话的页面中的会话范围
      【解决方案3】:

      &lt;c:out value="${sessionScope}"/&gt; 或仅${sessionScope} 列出 portlet 应用程序范围内的所有属性。

      所以,你可以尝试用这个表达式来获取你的属性!

      【讨论】:

        猜你喜欢
        • 2017-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-18
        • 1970-01-01
        • 2017-11-20
        • 2015-01-05
        • 2020-02-13
        相关资源
        最近更新 更多