Как обработать кэширование темы GWT файлы CSS

Мне записали приложение с Struts/Tiles/JSP, к которому я добавляю приложение GWT. non-GWT часть моего приложения обрабатывает CSS, кэширующуюся путем фактического выписывания файла CSS с номером версии, взятым от моего присоединенного репозитория SVN, как это "styles.css? svnbuild=12345". Тем путем я могу сказать браузеру кэшировать те файлы CSS навсегда и когда я развертываю новую версию, все мои пользователи сразу загружают его.

Теперь я иду дальше к приложению GWT, и я люблю, как оно использует "longmd5sum.cache.css" в качестве имени файла, таким образом, я могу все еще сказать браузеру кэшировать его навсегда. Проблема состоит в том, что файлы CSS, связанные с моей темой, как "gwt-standard.css", не имеют строгого имени и не присоединили мой svnbuild параметр. Каждый раз, когда я развертываю новую версию своего приложения, пользователи все еще видят старую версию CSS, которая заставляет его выглядеть неправильным.

Кто-либо выяснил лучшую практику для обработки кэширования gwt файлов CSS темы? Существует ли способ, которым я могу добавить svnbuild параметр или что-то подобное при добавлении CSS к документу?

7
задан Sean 13 January 2010 в 00:27
поделиться

1 ответ

Хорошо. Поэтому после того, как я опубликовал эту, я выкопал в исходный код GWT и нашел несколько ссылок о создании пользовательского линкера GWT.

http://development.lombardi.com/?p=29

http://code.google.com/webtoolkit/doc/1.6/devguideorganingprojects.html

Вот как я решил его с собой линкер. Сначала я сделал класс линкера, который расширяет стандартный IFRAMELINKER:

@LinkerOrder(LinkerOrder.Order.PRIMARY)
public class MyLinker extends IFrameLinker {
    protected String generateStylesheetInjector(String stylesheetUrl) {
        stylesheetUrl = stylesheetUrl + "?buildtime=" + System.currentTimeMillis();
        return super.generateStylesheetInjector(stylesheetUrl);
    }
}

после этого, это просто вопрос сообщена вашему модулю, чтобы использовать ваш пользовательский линкер. В вашем файле Module.gwt.xml:

<module>
    <define-linker name="mylinker" class="com.company.gwt.core.linker.MyLinker" />
    <add-linker name="mylinker" />
</module>

Просто попробовал его, и теперь в моем файле Nocache.js он выводит новый меток времени, когда я скомпилируюсь. Мои пользователи могут навсегда кэшировать файл CSS, и они автоматически загружают новый, когда я развернул новую версию приложения.

10
ответ дан 6 December 2019 в 21:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: