Как использовать интерфейс MyCssResource в классе Utility (GWT/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, чтобы я мог использовать его всего в 1 строке кода. 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? или какая-то ошибка, я не знаю.

Итак, как использовать интерфейс MyCssResource в классе Utility (GWT/GWTP)?


person Tum    schedule 26.11.2013    source источник


Ответы (2)


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

добавьте этот код в любом месте и используйте его. если вы дадите весь свой код, может быть более полезным.

person robert lennon    schedule 26.11.2013

Я надеюсь, что конструктор не вызывается. Можете ли вы проверить размещение предупреждения и убедиться, что вызывается sureInjected().

В соответствии с вызовом статического метода Java не требуется создание объекта. поэтому служебный объект не создается, поэтому конструктор не будет вызываться.

Для GWT CssResources необходимо обеспечить вызов Injected() перед применением css.

person JAVAC    schedule 26.11.2013
comment
я помещаю MyResource res=new MyResource(); res.css().ensureInjected(); внутри статического метода и обнаружил, что интерфейс не может быть создан, поэтому, возможно, мы не знаем, как использовать интерфейс - person Tum; 26.11.2013