2010-01-13 5 views
7

GWT 앱을 추가 할 Struts/Tiles/JSP로 작성된 앱이 있습니다. 내 응용 프로그램의 GWT가 아닌 부분은 실제로 "styles.css? svnbuild = 12345"와 같이 첨부 된 내 svn 저장소에서 가져온 버전 번호로 CSS 파일을 실제로 작성하여 CSS 캐싱을 처리합니다. 그런 식으로 브라우저에 영원히 그 css 파일을 저장하도록 지시 할 수 있으며 모든 사용자가 새 버전을 배포하면 즉시 모든 파일을 다운로드 할 수 있습니다.GWT 테마 CSS 파일 캐싱 처리 방법

이제 GWT 앱으로 이동하고 브라우저에서 영원히 캐시 할 수 있도록 파일 이름으로 "longmd5sum.cache.css"를 사용하는 방법을 좋아합니다. 문제는 "gwt-standard.css"와 같은 내 테마와 관련된 CSS 파일에 강력한 이름이없고 내 svnbuild 매개 변수가 첨부되어 있지 않다는 것입니다. 내 앱의 새 버전을 배포 할 때마다 사용자는 여전히 잘못된 것으로 보이는 CSS의 이전 버전을보고 있습니다.

gwt 테마 CSS 파일의 캐싱을 처리하는 데 가장 좋은 방법을 알고있는 사람이 있습니까? 문서에 CSS를 추가 할 때 svnbuild 매개 변수 나 비슷한 것을 추가 할 수있는 방법이 있습니까?

+0

제공된 솔루션은 GWT2.4에서 이미 쓸모가 없습니다. 새 것으로 제안 할 수 있습니까? – Hatter

답변

10

확인. 그래서 나는 이것을 게시 한 후 GWT 소스 코드를 파헤 치고 GWT 커스텀 링커를 만드는 것에 대한 링크를 발견했다.

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

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

여기에 내가 내 자신의 링커와 해결 방법입니다. 그냥 사용자 정의 링커를 사용하도록 모듈을 이야기의 문제 그 후

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

: 우선 표준 IFrameLinker를 확장하는 링커 클래스를했다. 당신의 module.gwt.xml 파일에서 :

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

그냥 그것을 밖으로 시도하고 지금 내 nocache.js이 파일에 새로운 타임 스탬프를 내가 컴파일 할 때마다 출력합니다. 내 사용자는 css 파일을 영원히 캐싱 할 수 있으며 새 버전의 앱을 배포 할 때마다 자동으로 새 파일을 다운로드합니다.

2

우선 할 일은 다음과 같이 ClientBundles를 사용하는 것입니다. Google Css Resource Cookbook .

private void injectAllCss() { 
     OurCssResources resources = GWT.create(OurCssResources.class); 
     resources.getCss().ensureInjected(); 
... 

이것은이다 : 우리의 응용 프로그램의 루트에 다음

public interface OurCssResources extends ClientBundle { 

    @Source("ourCSS.css") 
    @CssResource.NotStrict 
    public CssResource getCss(); 
... 

: 우리는 최근 다음 (분명히 어떤 미래를 목적으로하는 것은 @의 CssResource.NotStrict 주석을 제거하는)을 꽤 통증이 전환했다 일종의 무거운 손으로 접근하지만, 문제를 해결하고 Google이 의도 한대로 일을 처리 할 수 ​​있도록 도와줍니다.

당신이 의도 한 방식에 더 가까워 질 수있는 것처럼 보입니다. (비록 내가 이것들을 2.4에서 시도하지는 않았지만, 위에서 언급 한 것들은 2.4에서 작동했습니다 (나는 외부 의존성 (GXT)에 문제가있었습니다) 하지만 변경되지 않으므로 구식 메서드를 사용하여 방금 떠났다.