我有
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?
答案 0 :(得分:1)
public static final MyResource res=GWT.create(MyResource.class)
static{res.css().ensureInjected()}
在任何地方添加此代码并使用它。如果你提供所有代码,可能会更有帮助。
答案 1 :(得分:0)
我希望构造函数不被调用你可以检查发出警报,看看是否调用了EnsureInjected()。
根据Java静态方法调用不需要创建对象。因此不会创建Utility对象,因此不会调用构造函数。
对于GWT CssResources,必须在应用css之前调用ensureInjected()。