Как я могу реализовать "управление версиями CSS" (для решения проблем с кешем), используя JSF 2 h: outputStylesheet? - PullRequest
9 голосов
/ 24 ноября 2010

Я начинаю работать с JSF 2, поэтому я хотел попробовать h: outputStylesheet.Это работает нормально, но затем я попытался применить «шаблон» или трюк добавления строки запроса к запросу, которая меняется в зависимости от версии файла, чтобы заставить браузеры получать изменения.

Что-то вроде , что используетсяздесь .

К сожалению, я не смог этого сделать.На самом деле, при использовании этого тега он генерирует не простой URL, а вычисляемый, в котором уже есть строка запроса.Я нашел некоторую информацию о версиях ресурсов в JSF 2 как в спецификации, так и здесь , но, похоже, это относится к нескольким версиям ресурса, а это не то, что мне нужно.

Конечно, я всегда могу вернуться, чтобы НЕ использовать новый тег.Но я хотел поделиться этим здесь для обсуждения.

Обновление 1 - некоторый пример:

То, что я пробовал, выглядит примерно так:

<h:outputStylesheet library="css" name="estilo.css?v=1" target="head"/>

, который отображается как:

<link type="text/css" rel="stylesheet" href="RES_NOT_FOUND" />

Довольно наглядно.; -)

То, что я пытаюсь получить, выглядит примерно так:

<link rel="stylesheet" type="text/css" href="../css/estilo.css?v=1"/>

Который, используя JSP, я использовал для этого:

<link rel="stylesheet" type="text/css"
 href="<c:url value='/css/estilo.css?v=${initParam.version}'/>"/>

1 Ответ

8 голосов
/ 27 июля 2011

Столкнувшись с той же проблемой, я в итоге расширил javax.faces.application.ResourceHandlerWrapper and javax.faces.application.ResourceWrapper, добавив "& v = xyz" к результату ResourceWrapper#getRequestString().

Я видел такое решение, реализованное Primefaces и Openfaces.Просто взгляните на источник

org.primefaces.application.PrimeResourceHandler#createResource(String resourceName, String libraryName)

и

org.primefaces.application.PrimeResource#getRequestPath()

Доступно здесь .

Не забудьте добавить свою реализациюto face-config.xml:

<application>
  <resource-handler>your.package.YourResourceHandlerWrapper</resource-handler>
</application>
...