Я хочу реализовать переполнение кэша через строковый запрос с версией файла, но я также хочу использовать @ResourceDependency. Так это то, что у меня есть:@ResourceDependency с строковым запросом
@ResourceDependency(name = "scrypt.js?v=version", library = "mylib", target = "head")
Я знаю mojarra имел проблемы с строковых запросов до для <f:outputScript>
, но это было исправлено (stackoverflow question). Но, видимо, они никогда не поддерживали строковые запросы для аннотации.
Проблема в ResourceDependencyHandler#createComponentResource
. Он вызывает ResourceHandler#getRendererTypeForResourceName
, который возвращает null
, если предоставленный name
имеет строковый запрос, прикрепленный к нему. На самом деле это происходит до ServletContext#getMimeType
. Это тот парень, который не может реализовать тип mime: application/javascript
, когда есть строка запроса, прикрепленная к имени файла.
Кто-нибудь знает обходное решение для этого? В настоящее время я работаю с Mojarra 2.2.8.
спасибо.
Полностью квалифицированные имена классов, которые я упоминал:
com.sun.faces.application.annotation.ResourceDependencyHandler
javax.faces.application.ResourceHandler
По-видимому, для этого нет решения. Они придумали идею иметь одну аннотацию для Javascript и CSS-файлов вместо одной отдельной аннотации для каждого типа ресурса (например, и ), поэтому они полагаются на ServletContext # getMimeType, чтобы выяснить тип содержимого. Печально то, что реализации ServletContext # getMimeType обычно не знают, как обрабатывать строки запросов (т. Е. «? V = версия»), тем самым нарушая все это. –
Я думаю, что это может быть обходным путем на ваш вопрос: http://stackoverflow.com/questions/4268345/how-can-i-implement-css-versioning-to-solve-cache-issues-using-jsf-2- houtpu – Tarik
@Tarik Большое вам спасибо! Я не знал о декораторе. Я использовал его, чтобы указать на мою собственную реализацию ResourceHandler, где я переопределил getRendererTypeForResourceName, чтобы он мог обрабатывать строки запроса. –