2009-11-09 21 views
16

Tôi có ứng dụng GWT 1.7 và tôi muốn nâng cấp lên GWT 2 Milestone 2. Ứng dụng sử dụng 2 tệp CSS ngoài lớn. Trong GWT 1.7, tôi đã có một thư mục công cộng và đặt cả hai tệp CSS trong thư mục và ứng dụng của tôi được biên dịch và hoạt động tốt. Bây giờ cho GWT 2 Tôi đã tạo ra một lớp ResourceBundle và đặt tất cả sprites hình ảnh và CSS như sau:GWT 2 CssResource cách

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(); 

..... 
} 

Lớp Css là một lớp rỗng mở rộng CssResource:

public interface Css extends CssResource{ 

} 

Sau đó, trong onModuleLoad của tôi() tôi sử dụng:

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

Khi tôi biên soạn tôi nhận được lỗi sau:

 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. 

Tiếp theo hướng dẫn ở trên khi tôi sử dụng @external trên mọi tầng lớp phong cách của tôi bên trong file CSS tôi nhận được lỗi sau:

[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) 

Trả lời

7

Got nó giải quyết. Như đã chỉ ra bởi Thomas @ Google Groups -> Các @external không được đặt "trên" phong cách

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

Ví dụ từ liên kết này, css sẽ trông giống như:

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

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

Hãy thử với @NotStrict. Ví dụ:

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

Tôi nghĩ rằng đây là câu trả lời đúng – xybrek

+1

'@ NotStrict' là "không được khuyến khích cho mã mới": http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com /google/gwt/resources/client/CssResource.NotStrict.html –

Các vấn đề liên quan