我是第一次使用GWT ClientBundle.我写了扩展它的接口,这里是代码:
package edu.etf.fuzzy.client.login;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
public interface Resources extends ClientBundle {
@Source("logo_federacija.jpg")
ImageResource logo();
@Source("shim.gif")
ImageResource shim();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我如何确定这些资源(在这种情况下是图像)的确切位置.我应该把它们放在:a)与接口相同的目录 - (丑陋)?b)在一些永远无法改变的特定目录中?c)在我想要的目录中,但是应该有指定它的机制 - (会很棒)?
谢谢.
我有一个CssResource,我想让一些css类"映射"到方法:
@ClassName("top-table")
String topTable();
Run Code Online (Sandbox Code Playgroud)
但我想关闭GWT的混淆(至少在开发时,为了在firebug中进行更好的调试等).
有没有一种简单的方法来实现这一目标?我知道我可以在我的css文件中使用@external然后我必须定义所有我的css类,如@external .c1,.c2,.c3等...
像@external.*这样的东西可以解决我的问题,但至少在gwt 2.0.x中似乎没有
我目前的解决方案是使用:
<set-configuration-property name="CssResource.style" value="pretty"/>
Run Code Online (Sandbox Code Playgroud)
但这并没有关闭混淆,只是让它更漂亮:)我知道obf是需要避免碰撞但我不喜欢我的情况,并真的想关闭混淆
我们有一个Web应用程序,每个主要客户端都需要不同的主题.原始开发人员通过查看javascript中的URL并添加样式表来覆盖默认主题来完成此操作.
这方面的一个问题是网站默认查看几秒钟然后突然切换到正确的主题.另一个原因是它似乎浪费了大量的带宽/时间.
我目前的想法是使用我们的默认外观创建一个"默认" ClientBundle,并使用@ImageResouce等各种注释并指向不同的位置,使用客户端的图像覆盖每个条目(根据需要).
有没有人有这方面的经验?我认为的一个问题是无法使用uibinder样式标记,因为它们静态地指向特定的资源包.
有任何想法吗?
我通过CssResource访问样式名称,来自UiBinder和java视图.问题是由于类名混淆,我无法找到添加和删除后缀的方法.
到目前为止,我已经使用主要和从属名称的@external anotation管理了这种情况,但我不认为这是一个很好的解决方案.
从以下页面:开发人员指南 - CSS样式
很明显,在现代GWT
应用程序中,有两种方式来声明css
样式:
使用ClientBundle中包含的CssResource.在UiBinder模板中使用内联元素.
你如何使用这两种方法来覆盖GWT
默认风格,如gwt-Button
,gwt-TextBox
等?
我知道仍然可以使用从html页面或.gwt.xml文件引用的css样式表.但是,我想避免这种情况,因为现在不推荐使用这些方法.
在我的GWT大项目中,我有一个ClientBundle用于我的图像资源.我在其中定义了大约40个GIF文件.(每个文件的大小约为5KB)
然后我用静态方法创建一个类,将正确的图像设置为obj,作为参数获取:
public static void setImageFromId (String id,final Image img) {
//for 1.gif
if (id.equals("1")) {
GWT.runAsync(new RunAsyncCallback() {
@Override
public void onFailure(Throwable reason) {}
@Override
public void onSuccess() {
img.setResource(MyImages.INSTANCE.img1()); //MyImages is the ClientBundle
}
});
}
}
//for 2.gif
if (id.equals("2")) {
GWT.runAsync(new RunAsyncCallback() {
@Override
public void onFailure(Throwable reason) {}
@Override
public void onSuccess() {
img.setResource(MyImages.INSTANCE.img2()); //MyImages is the ClientBundle
}
});
}
//etc. for other images 3, 4, 5, ...
//...
}
Run Code Online (Sandbox Code Playgroud)
我想知道它是代码分裂的好模式吗?因为如果我不这样做,所有40个文件将在第一次调用时缓存到客户端浏览器,但是没有必要.
RGDS
我无法让CSS图像精灵出现在GWT UiBinder中.我确实回顾了如何在GWT中使用图像精灵?,但发现我已经做了建议.
我有一个ui.xml
,ClientBundle
接口与CssBundle
嵌套接口,和一个CSS文件.
ui.xml:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:with field="resources"
type="edu.wts.upholdingthetruth.poweroftheword.client.resources.POWResources" />
<g:FlowPanel width="100%" styleName="{resources.sprites.underMenuGlow}" />
</ui:UiBinder>
Run Code Online (Sandbox Code Playgroud)
ClientBundle:
public interface POWResources extends ClientBundle {
public static final POWResources INSTANCE = GWT.create(POWResources.class);
@Source("site1/undertopglow.png")
ImageResource underTopGlow();
@Source("sprites.css")
public Sprites sprites();
public interface Sprites extends CssResource {
String underMenuGlow();
}
// other stuff
}
Run Code Online (Sandbox Code Playgroud)
sprites.css:
@sprite .underMenuGlow {gwt-image: "underTopGlow"}
Run Code Online (Sandbox Code Playgroud)
所以,我编译我的应用程序(没有抱怨),并在浏览器中,我的图像丢失.当我在Chrome的开发人员工具中查看该页面时,我看到相应的div引用了混淆的css类,但我无法在任何地方找到该类.
另一方面,我能够使用显示图像<g:Image resource="{resources.underTopGlow}" />
.
有没有一个步骤,我想通过像这样的CSS精灵来显示图像?
我通常使用GWT ClientBundle来管理我的应用程序中的图像
@Source("icons/info.png")
ImageResource info();
Run Code Online (Sandbox Code Playgroud)
不,我想切换到.svg图形,但我没有找到像SVGResource之类的ClientBundle中使用svg的方法.我知道GWT支持svg,并且有可能在GWT中插入这些图形,但我想利用ClientBundle的优点+ svg的优点.有人已经解决了这个问题吗?
我想说,在一个集中的位置,
@def mainColor = #f00;
Run Code Online (Sandbox Code Playgroud)
然后,在我的所有其他css文件中,mainColor
无需重新定义它.然后,当我在一次更改mainColor时,我的整个应用程序会改变颜色.
到目前为止,我能想到的最好方法是@Source
为每个CssResource声明包含两个文件,并始终包含全局def文件.还有其他方法吗?
我想更好地理解GWT ClientBundle和缓存的使用.
例如,如果我有一个大文本文件,我想让我的客户端可用,我可以使用
public interface MyResources extends ClientBundle {
public static final MyResources INSTANCE = GWT.create(MyResources.class);
@Source("myText.txt")
public TextResource myText();
}
//-- then later to use the text
String text = MyResources.INSTANCE.myText().getText();
Run Code Online (Sandbox Code Playgroud)
这是否意味着在客户端第一次运行应用程序时将从服务器下载文件"myText.txt",然后该文件将存储在浏览器的缓存中,以便在将来使用该应用程序时,该文件不会需要下载?
如果是这样,如果我更改"myText.txt"会发生什么,应用程序是否知道获取新版本?
最后,如果文件确实存储在缓存中,那么这与HTML5中的本地存储有何不同?
谢谢.
我想将所有资源放入ClientBundle中以便于管理.所以我首先开始将单个css文件(也是目录下的文件/war
)放入ClinetBundle.但是这个样式无法在我的输出中呈现,但是如果我只是将css文件放在下面/war
而没有使用css ClientBundle,那么程序运行得很好.
下面是我的简单测试用例(使用ClientBundle) - 我将css文件放在client
包中,并删除目录下的css文件/war
:
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.resources.client.CssResource.NotStrict;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.RootPanel;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
public class Test implements EntryPoint {
private static final int REPORT_TITLE_HEIGHT = 50;
public static final MyResources INSTANCE = GWT.create(MyResources.class);
public interface MyResources extends ClientBundle {
@NotStrict
@Source("Test.css")
CssResource css();
}
public void onModuleLoad() {
INSTANCE.css().ensureInjected();
Window.enableScrolling(false);
Window.setMargin("0px");
VLayout vl = new VLayout();
vl.setWidth100();
vl.setHeight100();
HLayout reportTitleBar = new …
Run Code Online (Sandbox Code Playgroud) 我想在GWT应用程序中删除注入的CSSResource.
我使用了以下代码 MyClass.INSTANCE.ensureInjected();
我只想在特定页面上使用上面的CSSResource.所以剩下的页面应该按照实际的css/theme来工作.
一旦我注入了它,那么它适用于整个应用程序.我怎么能克服这个?
帮我.
我是 GWT 新手,很难理解Module和ClientBundle之间的根本区别。在 GWT 文档的某些区域中,两者似乎是同一件事,而在其他区域中,它们显然是不同的。
我的理解是,模块是部署到用户浏览器的客户端代码。这是一个包含 HTML、CSS 和 JS 的 ZIP 文件。
我的理解是 ClientBundle 类似于 Module,但它只包含静态资源,例如图像。
如果这些理解都是正确的,那么为什么需要区分两者呢?HTML/CSS/JS 不也是静态资源吗?!?如果我的说法离谱,请帮助我理解差异是什么,也许还提供每个差异的具体示例以及何时适合使用每个差异。提前致谢!
clientbundle ×13
gwt ×13
cssresource ×5
java ×4
uibinder ×3
css ×2
gwt2 ×2
module ×1
obfuscation ×1
optimization ×1
path ×1
split ×1
sprite ×1
svg ×1