我真的需要将css资源文件放入GWT中的ClientBundle吗?

时间:2012-06-20 16:50:03

标签: css gwt path clientbundle

我想将所有资源放入ClientBundle以便于管理。所以我首先开始将单个css文件(也是/war目录下的文件)放入ClinetBundle。但是样式无法在我的输出中呈现,但如果我只是将css文件放在/war下而没有使用css ClientBundle,那么程序运行得很好。

下面是我的简单测试用例(使用ClientBundle) - 我将css文件放在client包中的同一文件夹中,并删除/war目录下的css文件:

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 HLayout();
        reportTitleBar.setHeight(REPORT_TITLE_HEIGHT);
        reportTitleBar.setStyleName("report-title-bar");

        vl.setMembers(reportTitleBar);

        RootPanel.get().add(vl);
    }
}

无法呈现样式。

另一个简单的例子 - 不使用css ClientBundle并将css文件放回/war文件夹。

import com.google.gwt.core.client.EntryPoint;
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 void onModuleLoad() {

        Window.enableScrolling(false);
        Window.setMargin("0px");

        VLayout vl = new VLayout();
        vl.setWidth100();
        vl.setHeight100();

        HLayout reportTitleBar = new HLayout();
        reportTitleBar.setHeight(REPORT_TITLE_HEIGHT);
        reportTitleBar.setStyleName("report-title-bar");

        vl.setMembers(reportTitleBar);

        RootPanel.get().add(vl);
    }
}

可以正确呈现样式。

我的Test.css代码:

.report-title-bar {
    /* IE10 Consumer Preview */
    background-image: -ms-linear-gradient(top left, #FFFFFF 0%, #00A3EF 100%);
    /* Mozilla Firefox */
    background-image: -moz-linear-gradient(top left, #FFFFFF 0%, #00A3EF 100%);
    /* Opera */
    background-image: -o-linear-gradient(top left, #FFFFFF 0%, #00A3EF 100%);
    /* Webkit (Safari/Chrome 10) */
    background-image: -webkit-gradient(linear, left top, right bottom, color-stop(0, #FFFFFF), color-stop(1, #00A3EF));
    /* Webkit (Chrome 11+) */
    background-image: -webkit-linear-gradient(top left, #FFFFFF 0%, #00A3EF 100%);
}

这里有什么问题,请有人告诉我一些问题。理解!

1 个答案:

答案 0 :(得分:6)

如果你把你的css文件放到clientbundle中,你的css文件必须由GWT编译器CSS解析器解析,它目前基于旧版本,有点被黑客入侵。 (虽然将来会改变)

要使解析器工作,您需要像这样转义背景值:

background-image: literal('-webkit-linear-gradient(top left, #FFFFFF 0%, #00A3EF 100%)');

还有一些其他怪癖也需要逃避。查看文档并搜索转义:https://developers.google.com/web-toolkit/doc/latest/DevGuideClientBundle