Nano Hash - криптовалюты, майнинг, программирование

Почему приложение GWT не отображается?

Обновление: я собираюсь добавить награду к этому вопросу. Я добавил исходный код всего проекта на GitHub здесь:

https://github.com/doctrang/gwt-activities-places-mvp-example

Я решил переименовать свой SimpleModule в WebModule; Итак, в то время как во всех моих фрагментах кода ниже модуль GWT называется SimpleModule или simplemodule, в моем последнем коде вы увидите модуль с именами WebModule и webmodule соответственно, но они равны 1!

Примечание. Я понимаю, что здесь могут быть не все настроено идеально, и может быть какой-то мертвый код (SimpleModule.css и т. д.), который вообще не используется, но это мое самое первое приложение GWT. и я просто хочу получить вещь и работает!

Я экспериментирую со своим первым приложением GWT (2.5.1) и пытаюсь получить очень простой пользовательский интерфейс для отображения с использованием рекомендуемой среды Places & Activity (для управления историей), а также с использованием базовой архитектуры MVP.

Для простоты я поместил весь код Java в свою SimpleModule.java (точку входа). Как только я заставлю это доказательство концепции работать, я разобью SimpleModule.java на другие классы.

Моя цель — загрузить приложение GWT, когда пользователь переходит на мою домашнюю страницу (me.example.com). Из-за этого я создаю SimpleModule implements EntryPoint, а затем переименовываю хост-страницу с SimpleModule.html на index.html (чтобы, когда пользователи переходят на me.example.com или me.example.com/index.html, они вытаскивали SimpleModule).

Структура каталогов моей WAR:

war/
    hosts/
        simplemodule/
            SimpleModule.css
    WEB-INF/
        classes/
        lib/
        deploy/
        web.xml
    simplemodule/
        css/
        font/
        gwt/
        img/
        js/
        prettify/
        clear.cache.gif
        hosted.html
        simplemodule.nocache.js
    img/
        mylogo.jpg
    index.html

И index.html:

<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <script type="text/javascript" language="javascript" src="simplemodule/simplemodule.nocache.js"></script>
    </head>
    <body>
        <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
        <noscript>
            <div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
                Your web browser must have JavaScript enabled in order for this application to display correctly.
            </div>
        </noscript>
    </body>
</html>

И web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">
    <servlet>
        <servlet-name>greetServlet</servlet-name>
        <servlet-class>com.myapp.server.GreetingServiceImpl</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>greetServlet</servlet-name>
        <url-pattern>/simplemodule/greet</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>remoteLogging</servlet-name>
        <servlet-class>com.google.gwt.logging.server.RemoteLoggingServiceImpl</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>remoteLogging</servlet-name>
        <url-pattern>/simplemodule/remote_logging</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

И SimpleModule.java:

public class SimpleModule implements EntryPoint {
    private EventBus eventBus = new SimpleEventBus();
    private PlaceController placeController = new PlaceController(eventBus);
    private PlaceHistoryMapper placeHistoryMapper;
    private PlaceHistoryHandler placeHistoryHandler;
    private Place defaultPlace;
    private ActivityMapper activityMapper;
    private ActivityManager activityManager;
    private LoginDisplay loginDisplay = new LoginDisplay();

    @Override
    public void onModuleLoad() {
        bootstrap();

        RootPanel.get().add(loginDisplay);
        activityManager.setDisplay(loginDisplay);

        placeHistoryHandler.register(placeController, eventBus, defaultPlace);
        placeHistoryHandler.handleCurrentHistory();
    }

    private void bootstrap() {
        placeHistoryMapper = new PlaceHistoryMapper() {
            @Override
            public String getToken(Place arg0) {
                return "home";
            }

            @Override
            public Place getPlace(String arg0) {
                return defaultPlace;
            }
        };

        placeHistoryHandler = new PlaceHistoryHandler(placeHistoryMapper);

        defaultPlace = new Place() {};

        activityMapper = new ActivityMapper() {
            @Override
            public Activity getActivity(Place arg0) {
                return new LoginActivity();
            }
        };

        activityManager = new ActivityManager(activityMapper, eventBus);
    }

    public class LoginDisplay extends SimplePanel {
        private LoginDisplayUiBinder uiBinder = GWT
            .create(LoginDisplayUiBinder.class);

        public LoginDisplay() {
            super();

            uiBinder.createAndBindUi(this);
        }
    }

    public interface LoginDisplayUiBinder extends UiBinder<Widget, LoginDisplay> {
        // ???
    }

    public class LoginActivity extends AbstractActivity {
        @Override
        public void start(AcceptsOneWidget panel,
                com.google.gwt.event.shared.EventBus eventBus) {
            panel.setWidget(loginDisplay);
        }
    }
}

И LoginDisplay.ui.xml:

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
        xmlns:g="urn:import:com.google.gwt.user.client.ui"
        xmlns:b="urn:import:com.github.gwtbootstrap.client.ui">
    <g:HTMLPanel>
        <img src="img/mylogo.jpg" />

        <hr/>

        <form action="doStuff" method="post" class="form-horizontal"
                id="someForm" accept-charset="utf-8">   
            <div class="control-group">
                <label for="username" class="control-label">    
                    Username:
                </label>
                <div class="controls">
                    <input name="username" type="text" value="" id="username"/>
                </div>
            </div>
            <div class="control-group">
                <label for="password" class="control-label">    
                    Password:
                </label>
                <div class="controls">
                    <input name="password" type="password" value="" id="password"/>
                </div>
            </div>
            <div class="control-group">
                <div class="controls">
                    <input type="button" class="btn-danger" value="Login"/>
                </div>
            </div>
        </form>     
    </g:HTMLPanel>
</ui:UiBinder>

Обновление: и SimpleModule.gwt.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.1//EN"
        "http://google-web-toolkit.googlecode.com/svn/tags/2.5.1/distro-source/core/src/gwt-module.dtd">
<module rename-to='simplemodule'>
    <inherits name='com.google.gwt.user.User'/>

    <!-- Configure logging. -->
    <inherits name="com.google.gwt.logging.Logging"/>
    <set-property name="gwt.logging.logLevel" value="FINEST"/>
    <set-property name="gwt.logging.enabled" value="TRUE"/>
    <set-property name="gwt.logging.consoleHandler" value="ENABLED"/>
    <set-property name="gwt.logging.developmentModeHandler" value="DISABLED" />
    <set-property name="gwt.logging.popupHandler" value="DISABLED" />
    <set-property name="gwt.logging.systemHandler" value="DISABLED" />
    <set-property name="gwt.logging.firebugHandler" value="DISABLED" />
    <set-property name="gwt.logging.simpleRemoteHandler" value="DISABLED" />

    <!-- GWT-Bootstrap. -->
    <inherits name ="com.github.gwtbootstrap.Bootstrap"/>

    <inherits name='com.google.gwt.user.theme.clean.Clean'/>

    <entry-point class='com.myapp.client.SimpleModule'/>

    <source path='client'/>
    <source path='shared'/>
</module>

Источник веб-страницы после запуска сервера:

<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <script type="text/javascript" language="javascript" src="simplemodule/simplemodule.nocache.js"></script>
    </head>

    <body height="100%" width="100%">
        <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
        <noscript>
            <div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
                Your web browser must have JavaScript enabled in order for this application to display correctly.
            </div>
        </noscript>
    </body>
</html>

Когда я запускаю это в режиме разработки (цель Ant, которая вызывает Java на com.google.gwt.dev.DevMode), я получаю запуск инструмента DevMode без ошибок. Когда я выбираю "Запустить приложение", я получаю пустую веб-страницу. Когда я открываю Firebug и ищу ошибки, я не вижу никаких.

Что не так с моей настройкой??? Почему я не вижу простого логотипа с полями для входа под ним? Заранее спасибо!

Изменить: мое последнее обновление. Я последовал предложениям @Raphael (унаследовав модули Place и Activity и добавив аннотацию @UITemplate к LoginDisplayUiBinder), я получил метку «Привет, GWT!» печатаю в браузер!!! Затем я изменил свой метод onModuleLoader(), чтобы он выглядел так:

@Override
public void onModuleLoad() {
    bootstrap();

    //      RootPanel.get().add(new Label("Hello, GWT!"));
    RootPanel.get().add(loginDisplay);
    activityManager.setDisplay(loginDisplay);

    // Connect the PlaceController to the EventBus, and set the
    // defaultPlace as our first place in history.
    placeHistoryHandler.register(placeController, eventBus, defaultPlace);
    placeHistoryHandler.handleCurrentHistory();
}

И теперь я получаю следующее исключение:

onModuleLoad() threw an exception
Exception while loading module com.dummylandapp.client.WebModule. See Development Mode for details.
    java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:406)
    at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:526)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
    at java.lang.Thread.run(Thread.java:679) Caused by: com.google.web.bindery.event.shared.UmbrellaException: Exception caught: Exception caught: (HierarchyRequestError) @com.google.gwt.dom.client.Node::appendChild(Lcom/google/gwt/dom/client/Node;)([JavaScript object(15)]): Node cannot be inserted
    at the specified point in the hierarchy
    at com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:203)
    at com.google.web.bindery.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:88)
    at com.google.gwt.place.shared.PlaceController.goTo(PlaceController.java:156)
    at com.google.gwt.place.shared.PlaceHistoryHandler.handleHistoryToken(PlaceHistoryHandler.java:192)
    at com.google.gwt.place.shared.PlaceHistoryHandler.handleCurrentHistory(PlaceHistoryHandler.java:118)
    at com.dummylandapp.client.WebModule.onModuleLoad(WebModule.java:66) ... 9 more Caused by: com.google.gwt.event.shared.UmbrellaException: Exception caught: (HierarchyRequestError) @com.google.gwt.dom.client.Node::appendChild(Lcom/google/gwt/dom/client/Node;)([JavaScript object(15)]): Node cannot be inserted
    at the specified point in the hierarchy
    at com.google.gwt.activity.shared.ActivityManager.onPlaceChange(ActivityManager.java:168)
    at com.google.gwt.place.shared.PlaceChangeEvent.dispatch(PlaceChangeEvent.java:70)
    at com.google.gwt.place.shared.PlaceChangeEvent.dispatch(PlaceChangeEvent.java:1)
    at com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1)
    at com.google.web.bindery.event.shared.EventBus.dispatchEvent(EventBus.java:40)
    at com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:193) ... 14 more

  • Это, вероятно, проблема с шириной, высотой и т. д. Попробуйте установить ширину и высоту на 100% для <html>, <body> и основного <div>. В Chrome вы также можете проанализировать свое приложение с помощью F12, чтобы проверить размер ваших компонентов. 26.06.2013
  • Спасибо @adenoyelle (+1) - установить ширину/высоту на 100%, куда бы я это поместил? На самом деле я использую gwt-bootstrap (порт GWT для Twitter Bootstrap) и все их файлы CSS... 26.06.2013
  • Поскольку это только для того, чтобы проверить, возникают ли проблемы отсюда, вы можете проверить это непосредственно с помощью firebug. 26.06.2013
  • Очень сложно помочь, когда вы делитесь проектом размером 192 МБ на github. Вы должны делиться только необходимым проектом, а не целыми файлами из временных файлов, сборок и т. Д. !!!!! Я просто потратил впустую 5 минут времени и трафика, прежде чем понял размер загрузки, а затем отменил загрузку !!!! 04.07.2013
  • Спасибо @SSR (+1) - я новичок в git и GitHub; Я решил, что это лучший способ быстро разместить код моего проекта в общедоступном репозитории, но, наткнувшись на него, в итоге решил просто загрузить все, вместо того, чтобы пытаться заставить Git выбирать, какие файлы загружать, а какие нет. (например, lib, bin и т. д.). Надеюсь, награда в 500 баллов оправдает дополнительные усилия. 04.07.2013
  • Этот вопрос нуждается в хорошем редактировании. У вас есть много примеров кода, но вы также ссылаетесь на весь свой проект. И, наконец, вы, кажется, меняете вопрос на полпути вниз по странице и ищете помощи с исключением. 09.07.2013

Ответы:


1

Activity & Places — это благородная концепция, которая никогда не будет востребована из-за присущей ей сложности. Вместо этого попробуйте gwtp (платформа GWT). Ты никогда не вернешься. Вы можете получить работающие примеры MVP за считанные минуты, а GWTP имеет все функции управления историей/закладок, которые есть у A&P, с гораздо более простым API для понимания и кодирования.

Поверьте мне, GWTP — это то, что нужно для всех приложений MVP.

09.07.2013

2

Проблема здесь:

public class LoginDisplay extends SimplePanel {
    private LoginDisplayUiBinder uiBinder = GWT
        .create(LoginDisplayUiBinder.class);

    public LoginDisplay() {
        super();

        uiBinder.createAndBindUi(this);
    }
}

Вы создаете свой виджет, но никогда не добавляете его на панель:

uiBinder.createAndBindUi(this);

Пытаться :

this.add(uiBinder.createAndBindUi(this));

Обратите внимание, что вы также можете поместить интерфейс uiBinder в класс LoginDisplay, так как он нужен только здесь (делает ваш код более понятным):

public class LoginDisplay extends SimplePanel {

  public interface LoginDisplayUiBinder extends UiBinder<Widget, LoginDisplay> {}

  public LoginDisplay() {
    super();

    LoginDisplayUiBinder uiBinder=GWT.create(LoginDisplayUiBinder.class);
    this.add(uiBinder.createAndBindUi(this));
  }
}
26.06.2013
  • Спасибо - хороший улов @adenoyelle (+1) - однако я все еще получаю пустую веб-страницу, и Firebug не сообщает об ошибках... 26.06.2013
  • С Firebug вы видите элементы формы в DOM? 26.06.2013
  • Нет, я их не вижу. Кроме того, есть элемент с именем simplemodule, который имеет значение null. 26.06.2013
  • Что произойдет, если удалить все строки onModuleLoad() и оставить только строку RootPanel.get().add(loginDisplay);? 26.06.2013
  • Никаких изменений, @adenoyelle. Я попытаюсь добавить ваше предложение CSS, чтобы установить высоту и ширину ‹тела› на 100%, и сообщу. 26.06.2013
  • Иногда приложению GWT требуется время, чтобы появиться в режиме разработки. Вы пытались просто подождать 30 секунд? Вы также можете попытаться сократить onModuleLoad() до этой простой строки: RootPanel.get().add(new Label("Hello, world!"));. Если это по-прежнему не работает, можете ли вы скопировать и вставить целевой URL-адрес? 26.06.2013
  • Хорошо, я в index.html заменил <body> на <body height="100%" width="100%">, а также заменил RootPanel.get().add(loginDisplay) на RootPanel.get().add(new Label("Hello, GWT!"));. Я также подождал 3 минуты, чтобы увидеть, отображается ли что-нибудь. Ничего не изменилось, тот же пустой экран без ошибок. Как я уже сказал, я разрабатываю локально с помощью devmode, поэтому URL-адрес: http://127.0.0.1:8888/index.html?gwt.codesvr=127.0.0.1:9997. У меня есть общедоступный тестовый сайт, на котором я могу развернуться, если вам нужно/нравится. 26.06.2013

  • 3

    Вы используете Place и Activity в своем проекте, но ваш модуль не наследует их. Добавьте следующие строки в WebModule.xml :

    <inherits name='com.google.gwt.place.Place'/>
    <inherits name='com.google.gwt.activity.Activity'/>
    

    Кроме того, вы должны добавить аннотацию UiTemplate к вашему интерфейсу UiBinder, если шаблон представления не имеет того же имени, что и окружающий его класс. В вашем случае GWT ищет WebModule.ui.xml при попытке создать файл LoginDisplayUiBinder.

    @UiTemplate("LoginDisplay.ui.xml")
    public interface LoginDisplayUiBinder extends UiBinder<Widget, LoginDisplay> {}
    

    Обновить

    Ваше новое исключение вызвано этим:

    RootPanel.get().add(loginDisplay);
    activityManager.setDisplay(loginDisplay);
    

    Вы добавляете форму входа в первый раз и устанавливаете ее в качестве основного дисплея для своего ActivityManager. Отображение — это аргумент panel, заданный вашим действиям в их методе запуска:

    void start(AcceptsOneWidget panel, com.google.gwt.event.shared.EventBus eventBus);
    

    В вашем случае, когда вы инициируете событие изменения страницы (используя placeHistoryHandler.handleCurrentHistory();), LoginActivity попытается добавить LoginDisplay к себе, что приведет к Exception :

    panel.setWidget(loginDisplay);
    

    Простое исправление, которое вы можете сделать, это создать другой SimplePanel и установить его в качестве основного дисплея:

    final SimplePanel mainPanel = new SimplePanel();
    RootPanel.get().add(mainPanel);
    activityManager.setDisplay(mainPanel);
    
    06.07.2013
  • Спасибо @Raphael (+1) - я попробую и отчитаюсь о том, что найду! 09.07.2013
  • Ваа ваа вау!!! Спасибо @Raphael, так близко, мы почти у цели! Я внедрил оба предложенных вами изменения (унаследовав модули Place и Activity в моем WebModule.gwt.xml, а также добавив аннотацию @UiTemplate) и получил Hello, GWT! печать этикеток на моем экране. Пожалуйста, смотрите мое последнее редактирование для того, что происходит в настоящее время. Помоги мне вывести мой loginDisplay рисунок на экран, и вся награда твоя! Еще раз спасибо! 09.07.2013
  • Кроме того, дополнительно, просто любопытно: я шокирован тем, что никогда не получал сообщения об ошибке или даже предупреждения, когда я не наследовал модули Place/Activity!!! Является ли это типичным для GWT, или есть какой-то журнал, с которым я мог бы ознакомиться, чтобы диагностировать это самостоятельно? 09.07.2013
  • @TicketMonster Я использовал Maven (+ Netbeans) для сборки вашего проекта и получил несколько ошибок во время компиляции. Я не знаю, почему они не появились для вас :/ 09.07.2013
  • Спасибо @Raphael, это сработало! Последний дополнительный вопрос, я обещаю: я все еще не совсем понимаю ваше исправление с добавлением SimplePanel в RootPanel, а затем снова с ActivityManager. Может ли SimpePanel выступать в качестве контейнера для AcceptsOneWidget, который отправляется методу LoginActivity#start? 09.07.2013
  • @TicketMonster SimplePanel реализует AcceptsOneWidget. Экземпляр AcceptsOneWidget, который вы устанавливаете в качестве отображения, тот же, что и при вызове start(...) (на самом деле GWT использует Wrapper). Если вы не добавите дисплей в RootPanel, ничего не появится. 09.07.2013

  • 4

    У вас есть файл yourapp.gwt.xml? Если это так, пожалуйста, напишите об этом. Если нет, то причина. Подробнее об этом читайте в документации GWT. Потому что похоже, что вам может не хватать <entry-point class='com.myapp.MyEntryPointClass' />

    Поскольку это загрузит ваше приложение без каких-либо проблем, запустите ваш html-файл, однако код не будет выполнен, и вы останетесь с неизмененным html-файлом, который вы предоставили.

    Как вы создаете это приложение?

    26.06.2013
  • Спасибо @Kaszaq (+1), чтобы ответить на ваши вопросы: да, я написал SimpleModule.gwt.xml и обновил свой исходный пост его содержанием. Он упакован под com.myapp, тогда как SimpleModule.java упакован под com.myapp.client. Что касается того, как я создаю свое приложение, я использовал webAppCreator для создания исходной структуры каталогов проекта, которая включала файл build.xml с целью devmode. Это цель, которая заполняет мой каталог war/ всеми необходимыми файлами и запускает инструмент DevMode. 26.06.2013
  • @TicketMonster - у вас есть '‹module rename-to='webmodule'›', поэтому ваши файлы js должны быть не simplemodule.nocache.js, как вы написали, а webmodule/webmodule.nocache.js. Можете ли вы подтвердить, что после создания имени ваших файлов javascript [.nocache.js] используется префикс simplemodule, а не webmodule? 26.06.2013
  • Извините, это ошибка вырезания и вставки - обновление исходного сообщения, чтобы отразить правильное значение. 26.06.2013
  • @TicketMonster - пожалуйста, вставьте также источники веб-страницы, которую вы видите после запуска сервера. 27.06.2013

  • 5

    Я всегда запускаю свои приложения с одним и тем же именем проекта, одним и тем же именем модуля и одной и той же HTML-страницей.

    Нравится:

    Проект: Простой модуль

    XML: SimpleModule.gwt.xml

    Содержит это:

    Ну наконец то

    SimpleModule.html

    Вам не нужно переименовывать его в index.html.

    Когда gwt компилируется, скажем, вы запускаете его в Tomcat, ему не нужен index.html, он распознает SimpleModule.html как индекс.

    Надеюсь, это поможет.

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

    Не забывайте и о web.xml.

    03.07.2013
  • Спасибо @fguespe (+1) - несколько дополнений: (1) это просто ваша гипотеза (что переименование WebModule.html в index.html является основной причиной)? Или ты уверен? (2) До того, как я переименовал его в index.html, когда я развернул его локально на Tomcat, простой переход в localhost:8080/dummylandapp не приводил к загрузке моего модуля. Вместо этого мне пришлось пойти в localhost:8080/webmodule/WebModule.html. Это противоречит вашему утверждению, что ... он распознает SimpleModule.html как индекс - мысли? И (3) просто к вашему сведению — я действительно предоставил файл web.xml — как в своих фрагментах кода, так и в репозитории GitHub. 04.07.2013
  • Еще раз спасибо за любой вклад/отзыв! Как только я получу ответы на эти вопросы, я попробую ваши предложения и сообщу о том, что найду! 04.07.2013

  • 6

    1) Вы используете Eclipse для этой или какой-либо другой IDE? Когда я попытался использовать другую IDE (без плагина) с файлами ANT, я не смог заставить GWT работать должным образом.

    2) Вы оставили там весь сервлет GreetingService, вы уверены, что это не вызывает у вас проблем?

    06.07.2013
  • Спасибо @Marconius (+1)! 1) Я использую Eclipse, но не подключаемый модуль Google-Eclipse. Я использовал инструмент webAppCreator, поставляемый с GWT SDK, для создания начального проекта (отсюда GreetingService сервлет и другой фиктивный код), а затем импортировал его в Eclipse из моей файловой системы. Обратите внимание, что это прекрасно работало, когда я впервые импортировал код в Eclipse. Так что все добавленные мною места/действия/самые ценные игроки каким-то образом сломали его. И (2) сервлет GreetingService может вызывать некоторые проблемы, но опять же, это работало отлично, пока я не начал добавлять свои изменения. 06.07.2013
  • Чтобы увидеть, как модуль работал до, я добавил свои изменения в WebModule.java, закомментируйте всю верхнюю часть метода onLoad(). Затем удалите комментарий к нижней части, которая начинается с ВСЕ ПОСЛЕ ЭТОГО ПУНКТА БЫЛО ОРИГИНАЛЬНЫМ WebModule.java И БЫЛО РАБОТАЕТ НА 25.06.2013.. Это заставит приложение работать нормально, и это код, который был автоматически сгенерирован для меня webAppCreator. 06.07.2013
  • Да, скрипт ant, сгенерированный с помощью создателя приложения, очевидно, работает для примера приложения. Но когда я попытался использовать это для программы, которую я написал (также на основе примера приложения), я обнаружил, что через некоторое время оно отказывается компилироваться. Поскольку я ничего не знаю о муравье, я понятия не имел, как решить эту проблему; мое решение состояло в том, чтобы просто использовать плагин Eclipse. 07.07.2013
  • Это больше похоже на комментарий, чем на ответ. Я пометил для удаления. 09.07.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..