как установить переменную для области приложения, т.е. только 1 для всего приложения в контроллере Grails - PullRequest
2 голосов
/ 20 июля 2011

Я хочу установить одну переменную для всего приложения и обновлять ее каждый раз, когда поступает запрос на конкретное действие

как

def action = {
    // some integer variable is already set in application scope with name variable
    variable++
    render(view:"action", model:[variable])
}

В Gsp

<html>
    <body>
        Variable is ${variable}
    </body>
</html>

Выход будет

Переменная 1
// при последующих запросах
Переменная 2 и так далее ...

Спасибо

Ответы [ 2 ]

1 голос
/ 20 июля 2011

для этого варианта использования есть несколько возможностей:

  • сохранить вашу переменную в http://www.grails.org/doc/latest/ref/Controllers/servletContext.html (есть метод setAttribute)
  • создайте свой собственный компонент с одноэлементной областью для хранения ваших переменных
  • Полагаю, вы не хотите этого делать, но вы также можете использовать базу данных

Не увеличивайте ваш «глобальный» var в каждом действии контроллера, вместо этого используйте фильтр.

1 голос
/ 20 июля 2011

Должен ли он быть одним по всему приложению?

Это возможно с помощью (singleton) службы, которая будет обрабатывать ваше значение, например:

class VariableService {
   int value

   synchronized int get() {
      return value
   }

   synchronized int inc(int value) {
      this.value += value
      return this.value   
   }

   synchronized void set(int value) {
      this.value = value
   }
}

и использовать егогде вам нужно

...