0

Мое приложение имеет дорогой метод обслуживания, результаты которого должны быть 1) проверены на наличие ошибок и 2) представлены в апплет Java через URL-адрес (т. Е. В отличие от переменной JavaScript). Результатом метода является строка, и апплет только способен загружать данные из файла или URL-адреса.Значение переменной Grails session null

Я пытался справиться с этой проблемой, используя переменную сеанса:

def action1 = { 
    def input = params['input'] 
    def result = expensiveServiceMethod(input) 
    def failed = result == null 
    session['result'] = result 
    render(view:'view1', model:[failed:failed]) 
} 

def action2 = { 
    def result = session['result'] 
    render(result) 
} 

Затем в view1 апплет условно отображается в зависимости от состояния отказа, и результаты доступны апплет через action2 URL ,

К сожалению, result в action2 подходит к концу. null. Я проверял, что result is неnull в action1. Я делаю это неправильно?

Примечание
я бы использовал flash вместо этого, но есть дополнительные запросы, сделанные для того, чтобы инициализировать апплет.

ответ

1

Апплеты не могут отслеживать сеансовые куки сами. Поэтому, когда ваш апплет посылает второй запрос на действие2, он не отправляет cookie сессии обратно на сервер. Следовательно, для сервера, как нового сеанса, все, что вы установили в сеансе во время action1, не будет доступно в action2. Вам придется отслеживать файлы cookie в вашем апплете и отправлять их обратно на сервер при совершении звонков.

Я никогда не делал этого, но я думаю, что вы можете использовать Apache Commons HTTP-клиент на клиентской стороне (апплет) - он имеет поддержку для отслеживания куки

Смотреть это question -

+0

Спасибо, я предполагаю, что я не полностью понял механизм cookie сеанса. –