обновление данных области приложения весной? - PullRequest
0 голосов
/ 05 января 2012

У меня есть приложение с пружиной в спящем режиме, и я хочу обновить страницу 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 Я хочу показывать новые данные каждый раз. Как это сделать, значение i увеличивается с помощью метода serServletContext (). В действительности я должен вызывать один метод вместо i, но если я показываю обновленный i, то каждый раз, когда я могу сделать это также. ** любое использование с сервером - метод push **

1 Ответ

0 голосов
/ 05 января 2012

Может быть, я не полностью следовал вашему сценарию.Но вызов

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

просто установит 0 для атрибута с именем "value" и затем увеличит значение i.

Начать редактирование

Вот что происходит в вашем фрагменте кода.

  1. set i=0
  2. shout() вызывается
  3. кричать вызовы setServletContext(..)
  4. переопределяется setServletContext(..) вызывается
  5. устанавливает атрибут с именем "value", значение i
  6. i увеличивается, т.е.i = 1

Кроме того, поведение, которое вы видите, не связано с пружиной, просто вы используете хитроумный оператор postfix (variable ++).

Endedit

Если вы хотите, чтобы i увеличивался при вызове servletContext.setAttribute, вы должны использовать префиксный оператор (переменная ++)

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

Ознакомьтесь с постфиксными / префиксными операторами и проверьте этот пример программы.

Плюс каждый раз, когда вы устанавливаете глобальный i, который всегда инициализируется равным 0. Похоже, ваша цель довольнополучить целочисленное значение атрибута «value», а затем увеличить его.

...