Установить объект сеанса Groovlet в классе? - PullRequest
1 голос
/ 30 ноября 2011

У меня есть класс Groovy, MyRequest, который используется для обработки каждого HTTP-запроса. В конструкторе этот класс устанавливает переменную экземпляра _session в значение request.getSession(true) (где request - текущий запрос HttpServletRequest).

В моем скрипте Groovy первым делом я создаю экземпляр MyRequest. Во-вторых, я проверяю определенное свойство объекта Groovlet session. При моем первом запросе к сценарию этот объект session является нулевым, поэтому я получаю ошибку ссылки на нулевой объект. Второй запрос к сценарию, объект session определен и ошибки не возникает.

Согласно документации Groovlet , такую ​​ситуацию следует ожидать, поскольку я не установил явно объект Groovlet session после проверки его существования в моем сценарии .

Я действительно не хочу добавлять еще копировать код вставки в мои скрипты (и любые будущие в проекте). Это одна из причин, по которой я создал объект MyRequest - для определения объекта session для любого сценария, который его создает. Итак, как я могу определить объект session для моих скриптов Groovy в классе MyRequest? Можно ли каким-то образом использовать объект metaClass?

1 Ответ

0 голосов
/ 30 ноября 2011

Groovlets предоставляют вам возможности сеанса из коробки, нет необходимости в request.getSession ().

Если из вашего скрипта вы делаете:

new MyRequest(session)

затем с неаккуратным, нетипизированным классом MyRequest, вот так:

class MyRequest {
    def _session
    MyRequest(sess) {
        _session = sess
    }

    def nullSafe() {
        if(_sess?.notExist) // do something...
    }
}

Методы MyRequest могут безопасно обращаться к сеансу (при условии, что вы используете groovy нуль-безопасный (?) Оператор). Я отошел от Groovlets, но когда я катался самостоятельно, гуру Groovy предложили использовать локальные потоки Thread при передаче сеанса, запроса, ответа и т. Д. Из области действия сценария к объектам ...

...