scala – 使用Play Framework的缓存API在多语言网站中缓存操作
发布时间:2020-12-16 09:40:26 所属栏目:安全 来源:网络整理
导读:为了缓存一段给定秒数的标签和语言的动作,我写了下面的帮助方法(其中label是我给我的动作的名字): def cacheResponseFor(label: String,duration: Int)(action: EssentialAction) = { Cached({r: RequestHeader = (label + getLanguage(r))},duration){ ac
为了缓存一段给定秒数的标签和语言的动作,我写了下面的帮助方法(其中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) } 但是,我遇到了一些奇怪的事情,当我尝试缓存一个60年代的Action,并将语言从法语转换为英语,例如,我不断获得法语版本60秒,然后切换到英文。 调查之后,我发现方法getLanguage在每次调用该动作时都不会被调用,就好像Key只在缓存期结束之后进行评估。 这是不对的,我希望每次请求我的页面时都调用这个cacheResponseFor,该语言将使用getLanguage进行评估,并获得正确的缓存版本,即我应该使用2个缓存操作(每种语言一种)。 我错过了什么吗? 解决方法
也许问题在于getLanguage方法。按照
docs的建议尝试这样做:
def getLanguage(request: RequestHeader): String = { request.acceptLanguages .map(_.code) .headOption .getOrElse(helpers.LanguageHelpers.FRENCH) } 另外,看看 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |