Как проверить, выполняется ли код на стороне сервера или клиента в GWT? - PullRequest
12 голосов
/ 29 ноября 2011

У меня есть один класс, который используется как на стороне сервера, так и на стороне клиента. Как я могу проверить в его конструкторе, что он был вызван из класса клиента или сервера?

Я сделал это грязным способом - просто попробуйте, если метод GWT.create () выдает исключение, и если это так, запускает код на стороне сервера. Но как мне этого избежать?

    public PrintManager() {
    try {
        factory = GWT.create(MapConfigFactory.class);   //clientsiede factory creation
    } catch (Exception ex) {
        factory = AutoBeanFactorySource.create(MapConfigFactory.class); //serverside factory creator
    }
}

Ответы [ 2 ]

19 голосов
/ 29 ноября 2011

com.google.gwt.core.client.GWT.isScript() возвращает true, когда код выполняется на клиенте как JavaScript.

com.google.gwt.core.client.GWT.isClient() возвращает false, когда код выполняется на JVM сервера (общий код).

2 голосов
/ 29 ноября 2011

AutoBeanFactorySource не является общим кодом, поэтому вы не можете использовать этот код на клиенте.в этом случае вам необходимо:

  • использовать внедрение зависимостей, чтобы экземпляр MapConfigFactory мог быть предоставлен по-разному на стороне клиента и на стороне сервера
  • use super-source иметь два файла для одного и того же класса: один для клиентской части, а другой для серверной.super-source объясняется в Переопределении одной реализации пакета другим разделом http://code.google.com/webtoolkit/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml,, он используется GWT для эмуляции времени выполнения Java и, например, для com.google.gwt.regexp и com.google.gwt.safehtml пакеты, чтобы обеспечить единый API, который может работать как на стороне клиента, так и на стороне сервера.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...