如何在Utility类(GWT / GWTP)中使用接口MyCssResource?

时间:2013-11-26 02:45:25

标签: gwt uibinder gwtp

我有

public interface MyResource extends ClientBundle{
    @NotStrict
    @Source("/myResource.css")
    MyCssResource css();
}
public interface MyCssResource extends CssResource {
      String gridEvenRow();
      String gridOddRow();
      .... more styling here....
}
TestView.java中的

@UiField MyResource res;
@Inject
    public TestView(final Binder binder) {
        widget = binder.createAndBindUi(this);
        res.css().ensureInjected();
    }

在TestPresenter.java中,我可以毫无问题地设置Grid的样式。

for (int i = 1; i < myGrid.getRowCount(); i++) {
    if((i%2) == 0){
          myGrid.getRowFormatter().addStyleName(i, getView().getRes().css().gridEvenRow());
    }
    else{
          myGrid.getRowFormatter().addStyleName(i, getView().getRes().css().gridOddRow());
    }
}

但是每次初始化Grid时我都不想重复这段代码。所以我想把这段代码放到一个Utility类中,这样我就可以通过一行代码来使用它。 Utility.formatGridOddEvenRow(myGrid);

以下是Utility

中的代码
public class Utility {

    public static MyResource res;
    public Utility(){
         res.css().ensureInjected();
    }

    public static void formatGridOddEvenRow(Grid grid){
        for (int i = 1; i < grid.getRowCount(); i++) {
            if((i%2) == 0){
                grid.getRowFormatter().addStyleName(i, res.css().gridEvenRow());
            }
            else{
                grid.getRowFormatter().addStyleName(i, res.css().gridOddRow());
            }
        }
    }
}

然而,它遇到了运行时错误[ERROR] - Uncaught exception escaped?或者我不知道的某种错误。

那么,如何在Utility类(GWT / GWTP)中使用接口MyCssResource?

2 个答案:

答案 0 :(得分:1)

public static final MyResource res=GWT.create(MyResource.class)
static{res.css().ensureInjected()}

在任何地方添加此代码并使用它。如果你提供所有代码,可能会更有帮助。

答案 1 :(得分:0)

我希望构造函数不被调用你可以检查发出警报,看看是否调用了EnsureInjected()。

根据Java静态方法调用不需要创建对象。因此不会创建Utility对象,因此不会调用构造函数。

对于GWT CssResources,必须在应用css之前调用ensureInjected()。