在春季更新应用程序范围的数据?

Posted

技术标签:

【中文标题】在春季更新应用程序范围的数据?【英文标题】:updating application scoped data in spring? 【发布时间】:2012-01-05 19:04:30 【问题描述】:

我有一个带有 hibernate 的 spring 应用程序,我想用这些数据更新 Jsp 页面。 我每次都在使用此类更新应用程序范围

    public class PutDataInApplication implements ServletContextAware
            int i = 0;
            javax.servlet.ServletContext servletContext;
            @Scheduled(fixedDelay=2)
            public void shout()
                 setServletContext(servletContext);
            

            @Override
            public void setServletContext(ServletContext servletContext) 
                 // TODO Auto-generated method stub
                 servletContext.setAttribute("value", i++);
            


我想在jsp中使用这个

Value is :: $applicationScope.value

但它只显示Value is :: 0 我想每次都显示新数据。如何做到这一点,我的价值是递增 serServletContext() 方法。 实际上,我必须调用一种方法来代替 i,但是如果我每次都显示更新的 i,我也可以这样做。 ** 与服务器一起使用 - 推送方法 **

【问题讨论】:

【参考方案1】:

可能是我没有完全按照你的方案。 但是调用

servletContext.setAttribute("value", i++);

只会为名为“value”的属性设置 0,然后递增 i

开始编辑

这是您的代码片段中发生的情况。

    设置i=0 shout() 被调用 喊叫setServletContext(..) 被覆盖的setServletContext(..) 被调用 它设置名为“value”的属性,值为i i 递增,即;我=1

您看到的行为也与spring无关,只是您以一种棘手的方式使用后缀运算符(变量++)。

结束编辑

如果您想在调用 servletContext.setAttribute 时看到 i 递增,则必须使用前缀运算符 (++variable)

试试 servletContext.setAttribute("value", ++i);

阅读后缀/前缀运算符和check this example program.

加上每次设置全局 i 时,它总是初始化为 0。看起来你的目标是获取“value”属性的整数值,然后增加它。

【讨论】:

如果我在方法 say() 中打印 i 值,它只会打印更新后的 i.... @RameshK,您似乎缺少后缀运算符的基础知识。当您在喊叫中打印“i”时,它已经在 setSevletContext 内递增

以上是关于在春季更新应用程序范围的数据?的主要内容,如果未能解决你的问题,请参考以下文章

在春季写入/更新属性文件值

春季安全删除用户 - 会话仍处于活动状态

春季安全会话标识符未更新

在春季获取、转换和更新数据的最佳方法是啥?

春季请求和会话范围有啥区别?

春季启动中的postgresql错误