Как объединить GWT и Библиотеку дизайна материалов без Maven? - PullRequest
0 голосов
/ 06 декабря 2018

Я пытался использовать MD-библиотеку из Central Maven Repo , просто скачав банку и просто используя обычный Java-проект в Eclipse .

Из Central Maven Repo я использовал jar gwt-material , и поскольку он сказал, что во время компиляции мне также нужен MD-jQuery-lib, я интегрировал этот jar для gwt-material-jQuery тоже.

Итак, вы найдете

  • gwt.xml: где я наследую все необходимые библиотеки для gwt-проекта
  • entryPoint-класс (Addressbook2) с onModuleLoad() -методом
  • UIBinder-классом, экземпляр которого должен быть добавлен в entryPoint-класс
  • UIBinder.ui.xml-файл, в котором MatDes-Lib интегрирован как ресурс-поле

Заранее извините за такой огромный пост.Не знал, как упаковать его более компактно.

Так что запуск и компиляция этого в Eclipse теперь работает с GWT Development Mode with Jetty, после интеграции MatDes-jQuery-Lib, но когда я открываюадрес на локальном хосте http://127.0.0.1:8888/Addressbook.html Я просто получаю белое окно браузера без содержимого и даже не могу открыть Dev-Tools.Я что-то упустил в конфигурации или код просто не правильный, и мне нужно это настроить?

gwt.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.8.2//EN"
  "http://gwtproject.org/doctype/2.8.2/gwt-module.dtd">
<module rename-to='addressbook'>
  <inherits name='com.google.gwt.user.User'/>
  <inherits name='com.google.gwt.user.theme.clean.Clean'/>
  <inherits name='gwt.material.design.jquery.JQuery'/>
  <inherits name='gwt.material.design.GwtMaterialDesignBasic'/>

  <!-- Specify the paths for translatable code                    -->
  <source path='client'/>
  <source path='shared'/>
  <entry-point class='addressbook.client.Addressbook2'/>
  <!-- allow Super Dev Mode -->
  <add-linker name="xsiframe"/>
  <set-configuration-property name="CssResource.enableGss" value="true" />
  <extend-property name="locale" values="de, en"/>
  <set-property-fallback name="locale" value="en"/>
</module>

EntryPoint-Class

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.RootLayoutPanel;

import addressbook.client._2view.MainViewUIB;
public class Addressbook2 implements EntryPoint {

    @Override
    public void onModuleLoad() {
        Window.alert("Hello, World!");
        RootLayoutPanel.get().add(new MainViewUIB());
    }
}

MainViewUIB-Class

package addressbook.client._2view;

import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;

import gwt.material.design.client.resources.MaterialResources;

public class MainViewUIB extends Composite {

    private static final MainViewUIBUiBinder uiBinder = GWT.create(MainViewUIBUiBinder.class);

    interface MainViewUIBUiBinder extends UiBinder<Widget, MainViewUIB> {
    }

    public MainViewUIB() {
        initWidget(uiBinder.createAndBindUi(this));
    }

    @UiField(provided = true)
    MaterialResources res;
}

MainViewUI.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:m="urn:import:gwt.material.design.client.ui">
    <ui:with type="gwt.material.design.client.resources.MaterialResources" field="res"></ui:with>
    <m:MaterialPanel>
        <m:MaterialIcon marginTop="120" iconType="POLYMER" iconSize="LARGE"/>
        <m:MaterialLabel text="Hello MD World" fontSize="2em"/>
        <m:MaterialLabel text="Start building now your gwt-material apps." fontSize="0.8em"/>
    </m:MaterialPanel>
</ui:UiBinder>

Вот результат, который я получаю, просматривая страницу в Chrome. Я просто получаю один элемент на странице:

<iframe id="addressbook" tabindex="-1" style="position: absolute; width: 0px; height: 0px; border: none; left: -1000px; top: -1000px;">
<script src="http://127.0.0.1:9876/addressbook/0A7EA82001E95E9BED1D0ABA0EF89DEF.cache.js"></script>
</iframe>

1 Ответ

0 голосов
/ 07 декабря 2018
@UiField(provided = true)
MaterialResources res;

provided=true означает, что .ui.xml не нужно создавать этот ресурс, потому что вы предоставите его перед вызовом createAndBind.Невыполнение этого требования может привести к возникновению исключений NullPointerExceptions при попытке создания виджета, что приведет к тому, что на этом пути не будет отображаться содержимое.Тем не менее, ничто в вашем .ui.xml на самом деле, кажется, не использует res (за исключением объявления в ui:with, что похоже на объявление его в качестве переменной), так что вы, вероятно, можете удалить и поле, и ui:withуказывая на это.

...