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



我有

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中,我可以毫无问题地对网格进行样式化。

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

但我不想每次初始化网格时都重复这段代码。所以我想把这段代码放进一个Utility类中,这样我只需要一行代码就可以使用它。Utility.formatGridOddEvenRow(myGrid);

这是公用事业中的代码

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)中使用接口MySResource?

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

将此代码添加到任何位置并使用它。如果您提供所有代码,可能会更有帮助。

我希望构造函数没有被调用,你可以检查一下是否放置了一个警报,看看是否调用了ensureInjected()。

根据Java,静态方法调用不需要创建对象。所以不会创建实用程序对象,所以不会调用构造函数。

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

最新更新