showcase - GWT 2 CssResource cómo
gwt showcase (2)
Tengo una aplicación GWT 1.7 y quiero actualizarla a GWT 2 Milestone 2. La aplicación utiliza 2 grandes archivos CSS externos. En GWT 1.7 tuve una carpeta pública y puse los archivos CSS en la carpeta y mi aplicación compilada y funcionó bien. Ahora, para GWT 2, he creado una clase de ResourceBundle y puse todos los sprites de imagen y CSS de la siguiente manera:
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();
.....
}
La clase Css es una clase vacía que extiende CssResource:
public interface Css extends CssResource{
}
Entonces en mi onModuleLoad () uso:
StyleInjector.inject(ResourceBundle.INSTANCE.stylesheet1().getText());
StyleInjector.inject(ResourceBundle.INSTANCE.stylesheet2().getText());
Cuando compilo me sale el siguiente error:
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.
Siguiendo las instrucciones anteriores cuando uso @external sobre todas mis clases de estilo dentro del archivo CSS, obtengo el siguiente error:
[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)
Lo tengo resuelto. Como lo señala Thomas @ Google Groups -> El @external no debe ponerse "arriba" del estilo
http://code.google.com/p/google-web-toolkit/wiki/CssResource#External ...
El ejemplo de este enlace, el css se verá como:
@external .legacySelectorA, .legacySelectorB;
.obfuscated .legacySelectorA { .... }
.obfuscated .legacySelectorB { .... }
/* @external also accepts tail-globs */
@external .myProject-*;
.myProject-text {}
.myProject-foo {}
Probar con @NotStrict
. Ejemplo:
@NotStrict
@Source("com/web/tech/public/stylesheet1.css")
public Css stylesheet1();