Мне записали приложение с 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 к документу?
Хорошо. Поэтому после того, как я опубликовал эту, я выкопал в исходный код 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, и они автоматически загружают новый, когда я развернул новую версию приложения.