Как объединить GWT и Библиотеку дизайна материалов без Maven?
Я пытался использовать MD-библиотеку из Central Maven Repo, просто скачав jar и просто используя обычный 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-класс
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-класс
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 ответ
@UiField(provided = true)
MaterialResources res;
provided=true
означает, что.ui.xml не нужно создавать этот ресурс, потому что вы предоставите его перед вызовом createAndBind. Невыполнение этого требования может привести к возникновению исключений NullPointerExceptions при попытке создания виджета, что приведет к тому, что на этом пути не будет отображаться содержимое. Тем не менее, ничто в вашем.ui.xml на самом деле, кажется, не использует res
(за исключением того, чтобы быть объявленным в ui:with
(это как объявление переменной), так что вы можете удалить как поле, так и ui:with
указывая на это.