Чтобы кэшировать действия на метку и язык за определенное количество секунд, я написал следующий вспомогательный метод (где label, это имя, которое я даю моему действию):
def cacheResponseFor(label: String, duration: Int)(action: EssentialAction) = {
Cached({r: RequestHeader => (label + getLanguage(r))}, duration){ action }
}
def getLanguage(request: RequestHeader): String = {
request.cookies
.get(helpers.SessionHelpers.LANGUAGE_SESSION)
.map(_.value)
.getOrElse(helpers.LanguageHelpers.FRENCH)
}
Но я испытываю что-то странное, когда я пытаюсь кэшировать Action
на 60 секунд и переключать языки тем временем на английский с французского, например, я продолжаю получать французскую версию на 60-е годы, а затем переключается на английский.
После исследования я обнаружил, что метод getLanguage
не вызывается при каждом вызове этого действия, как если бы ключ оценивался только после окончания периода кэширования.
Это не так, я бы хотел, чтобы этот cacheResponseFor
вызывался каждый раз, когда я запрашиваю свою страницу, язык оценивается с помощью getLanguage
, и я получаю правильную кешированную версию, то есть я должен получить 2 кэшированных действия ( по одному на каждый язык).
Я что-то пропустил?