2009-11-09 91 views
16

我有一個GWT 1.7應用程序,我想升級到GWT 2 Milestone 2.應用程序使用2個大的外部CSS文件。在GWT 1.7中,我有一個公用文件夾,並將兩個CSS文件放在文件夾中,我的應用程序編譯並正常工作。現在GWT 2我創建了一個ResourceBundle類,並把所有的圖片和CSS如下:GWT 2 CssResource如何到

public interface ResourceBundle extends ClientBundle { 

public static final ResourceBundle INSTANCE = GWT.create(ResourceBundle.class); 

@Source("com/web/tech/public/stylesheet1.css") 
public Css stylesheet1(); 

@Source("com/web/tech/public/stylesheet2.css") 
public Css stylesheet2(); 

@Source("com/docobo/keswick/keswickweb/public/images/organisnew.gif") 
public ImageResource add_org(); 

..... 
} 

的CSS類是一個空類擴展CssResource:

public interface Css extends CssResource{ 

} 
在我的onModuleLoad

則()我使用:

StyleInjector.inject(ResourceBundle.INSTANCE.stylesheet1().getText()); 
StyleInjector.inject(ResourceBundle.INSTANCE.stylesheet2().getText()); 

我編譯時出現以下錯誤:

 Rebinding com.docobo.keswick.keswickweb.client.ClientResources.ResourceBundle 
      Invoking <generate-with class='com.google.gwt.resources.rebind.context.InlineClientBundleGenerator'/> 
       Creating assignment for gxt_gray() 
        Replacing CSS class names 
        [ERROR] The following unobfuscated classes were present in a strict CssResource: 
         [ERROR] x-tab-scroller-left 
         [ERROR] x-tab-strip-disabled 
         [ERROR] ......loads of other styles 

Fix by adding String accessor method(s) to the CssResource interface for obfuscated classes, or using an @external declaration for unobfuscated classes. 

下面當我用@external我所有的樣式類上面的CSS文件,我得到以下錯誤內的上述指令:

[ERROR] Generator 'com.google.gwt.resources.rebind.context.InlineClientBundleGenerator' threw threw an exception while rebinding 'com.docobo.keswick.keswickweb.client.ClientResources.ResourceBundle' 
java.lang.StringIndexOutOfBoundsException: String index out of range: -2 
at java.lang.String.substring(Unknown Source) 
at com.google.gwt.resources.css.GenerateCssAst$GenerationHandler.ignorableAtRule(GenerateCssAst.java:236) 
at org.w3c.flute.parser.Parser.atRuleDeclaration(Parser.java:1178) 
at org.w3c.flute.parser.Parser.ignoreStatement(Parser.java:622) 
at org.w3c.flute.parser.Parser.parserUnit(Parser.java:452) 
at org.w3c.flute.parser.Parser.parseStyleSheet(Parser.java:107) 
at org.w3c.flute.parser.Parser.parseStyleSheet(Parser.java:119) 
at com.google.gwt.resources.css.GenerateCssAst.exec(GenerateCssAst.java:663) 
at com.google.gwt.resources.rg.CssResourceGenerator.prepare(CssResourceGenerator.java:506) 
at com.google.gwt.resources.rebind.context.AbstractClientBundleGenerator.initAndPrepare(AbstractClientBundleGenerator.java:531) 
at com.google.gwt.resources.rebind.context.AbstractClientBundleGenerator.initAndPrepare(AbstractClientBundleGenerator.java:502) 
at com.google.gwt.resources.rebind.context.AbstractClientBundleGenerator.generate(AbstractClientBundleGenerator.java:179) 
at com.google.gwt.dev.cfg.RuleGenerateWith.realize(RuleGenerateWith.java:49) 
at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.tryRebind(StandardRebindOracle.java:108) 
at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.rebind(StandardRebindOracle.java:54) 
at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:154) 
at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:143) 
at com.google.gwt.dev.Precompile$DistillerRebindPermutationOracle.getAllPossibleRebindAnswers(Precompile.java:315) 
at com.google.gwt.dev.jdt.WebModeCompilerFrontEnd.doFindAdditionalTypesUsingRebinds(WebModeCompilerFrontEnd.java:107) 
at com.google.gwt.dev.jdt.AbstractCompiler$CompilerImpl.process(AbstractCompiler.java:161) 
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:444) 
at com.google.gwt.dev.jdt.AbstractCompiler$CompilerImpl.compile(AbstractCompiler.java:84) 
at com.google.gwt.dev.jdt.AbstractCompiler$CompilerImpl.compile(AbstractCompiler.java:196) 
at com.google.gwt.dev.jdt.AbstractCompiler$CompilerImpl.access$300(AbstractCompiler.java:70) 
at com.google.gwt.dev.jdt.AbstractCompiler.compile(AbstractCompiler.java:481) 
at com.google.gwt.dev.jdt.BasicWebModeCompiler.getCompilationUnitDeclarations(BasicWebModeCompiler.java:113) 
at com.google.gwt.dev.jdt.WebModeCompilerFrontEnd.getCompilationUnitDeclarations(WebModeCompilerFrontEnd.java:49) 
at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.precompile(JavaToJavaScriptCompiler.java:415) 
at com.google.gwt.dev.jjs.JavaScriptCompiler.precompile(JavaScriptCompiler.java:32) 
at com.google.gwt.dev.Precompile.precompile(Precompile.java:507) 
at com.google.gwt.dev.Precompile.precompile(Precompile.java:408) 
at com.google.gwt.dev.Compiler.run(Compiler.java:194) 
at com.google.gwt.dev.Compiler$1.run(Compiler.java:145) 
at com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:89) 
at com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger(CompileTaskRunner.java:83) 
at com.google.gwt.dev.Compiler.main(Compiler.java:152) 

回答

7

明白瞭解決。 正如托馬斯@谷歌組織指出 - >的@external不能把「上面」的風格

http://code.google.com/p/google-web-toolkit/wiki/CssResource#External ...

從這個鏈接的例子中,CSS將是這樣的:

@external .legacySelectorA, .legacySelectorB; 
.obfuscated .legacySelectorA { .... } 
.obfuscated .legacySelectorB { .... } 

/* @external also accepts tail-globs */ 
@external .myProject-*; 
.myProject-text {} 
.myProject-foo {} 
15

試用@NotStrict。例如:

@NotStrict 
@Source("com/web/tech/public/stylesheet1.css") 
public Css stylesheet1(); 
+0

我覺得這是'@ NotStrict'是「不推薦在新代碼」正確答案 – xybrek 2012-04-05 16:32:35

+1

:http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com /google/gwt/resources/client/CssResource.NotStrict.html – 2012-11-28 20:40:59