【问题标题】:How to update session attribute如何更新会话属性
【发布时间】:2014-07-05 15:42:58
【问题描述】:

我保存了一些会话属性。我有一个 jsp 页面,通过该页面调用 servlet。此 servlet 更新会话变量之一,但我无法在我的 jsp.Pls 帮助中看到这些更改的反映。

在我的 servlet 中

    List<DriverList> abc = dao.getABC();
    request.getSession().removeAttribute("abc");
    request.getSession().setAttribute("abc", abc);

在我的jsp中

function update()
{
    var url = "updateServlet";
    var req = $.ajax({
    type: 'GET',
    url: url,
    cache: false,
    type: "GET",
    success: function()
    {
        latlng = [];
        latlng = [<c:forEach var="test" items="${abc}">
                     [<c:out value="${test.latitude}"/>,<c:out value="${test.longitude}"/>,"<c:out value= "${test.name}" />",<c:out value="${test.cellNo}"/>],
                 </c:forEach> ];

    },
    error: function (status) {
         }

    });

}  

${abc} 的值与之前相同。如何获取新值?

确切的流程 -

  1. 当登录 servlet 被调用时,abc 值设置为sessionAttribute

  2. 现在重定向到 base.jsp。我第一次使用 abc。现在每 30 秒调用一次 update() 函数。此更新函数通过 ajax 调用 servlet,其中会话属性 abc 被更新。

  3. 在ajax请求的成功函数中,我想使用这个新的abc值,但又得到了旧的。

【问题讨论】:

  • 请描述您的请求流程。
  • @Vaishali 我也有同样的问题,你找到解决办法了吗?

标签: java jsp session servlets


【解决方案1】:

要访问 JSP 中的 abc 变量,请尝试:

${sessionScope.abc}

还要注意,在设置之前删除通常是多余的。所以:

request.getSession().removeAttribute("abc");
request.getSession().setAttribute("abc", abc);

可以简单地变成:

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

【讨论】:

  • 实际上,一旦用户登录,我就会设置此属性。这就是我使用 removeAttribute 的原因。我也可以看到jsp中的值,但是当我调用servlet(即调用我的js的更新函数)时,我希望值得到更新,然后当我使用“$abc”时,我想要abc新价值观
  • 在会话映射中使用键 abc 设置值将覆盖之前与 abc 键关联的任何值。
  • 好的,我会删除removeAttribute,但问题还是一样
  • ${sessionScope.abc} 没有完成这项工作吗? removeAttribute 的注释不是解决方案的一部分。
  • 没有得到相同的值。
【解决方案2】:

我有类似的问题。 原来,当你使用

HttpSession 

控制器中的对象,不应使用

进行注释
@SessionAttributes

【讨论】:

    猜你喜欢
    • 2017-07-08
    • 2022-01-15
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2013-01-17
    相关资源
    最近更新 更多