Pet*_*ter 20 scala playframework playframework-2.3 playframework-2.4
为了在给定的秒数内缓存每个标签和语言的操作,我编写了以下帮助器方法(其中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)
}
Run Code Online (Sandbox Code Playgroud)
但是我遇到了一些奇怪的事情,当我尝试缓存一个Action60秒并在此期间将语言切换为法语时,我会继续使用法语版本60秒然后切换到英语.
在调查之后,我发现getLanguage 在每次调用该操作时都不会调用该方法,就好像Key仅在缓存期结束后才进行评估.
这是不对的,我希望cacheResponseFor每当我请求我的页面时调用它,语言得到评估使用getLanguage,我得到正确的缓存版本,即我最终应该有2个缓存操作(每种语言一个).
我错过了什么吗?
也许问题出在getLanguage方法上。按照文档的建议尝试一下:
def getLanguage(request: RequestHeader): String = {
request.acceptLanguages
.map(_.code)
.headOption
.getOrElse(helpers.LanguageHelpers.FRENCH)
}
Run Code Online (Sandbox Code Playgroud)
另外,看一下Controller.request2lang()方法,看看它是否对您有帮助。
| 归档时间: |
|
| 查看次数: |
554 次 |
| 最近记录: |