我有
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()。