【问题标题】:How to combine GWT and Material Design Library w/o Maven?如何结合 GWT 和 Material Design Library w/o Maven?
【发布时间】:2019-05-07 20:34:42
【问题描述】:

我试图通过下载 jar 并在 Eclipse 中使用普通的 Java-Project 来使用来自 Central Maven Repo 的 MD-Library。

Central Maven Repo 我使用了 jar gwt-material,因为它在编译期间说我还需要 MD-jQuery-lib,所以我也为 gwt-material-jQuery 集成了该 jar。

所以跟着你会发现

  • gwt.xml:我继承了 gwt 项目所需的所有库
  • entryPoint-class (Addressbook2) 和onModuleLoad()-method
  • UIBinder-class,在entryPoint-class中添加一个实例
  • 将 MatDes-Lib 集成为资源字段的 UIBinder.ui.xml 文件

提前对这么大的帖子表示抱歉。不知道如何包装更紧凑。

所以在 Eclipse 中运行和编译它现在可以使用 GWT Development Mode with Jetty,在集成 MatDes-jQuery-Lib 之后,但是当我在本地主机 http://127.0.0.1:8888/Addressbook.html 打开地址时,我只是得到一个没有内容的白色浏览器窗口,甚至无法打开开发工具。我是在配置中遗漏了什么,还是代码不正确而我必须对其进行调整?

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>

入口点类

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>

【问题讨论】:

  • 您似乎重复发布了您的入口点类,并跳过了您的视图类和 html 文件。您还可以在开发模式视图中添加任何浏览器控制台消息(rt 单击浏览器,“检查”,单击控制台)和任何输出吗?
  • 嗨 @ColinAlworth 不,我不能 rt 单击浏览器并查看控制台或检查器,用双 ep 类更改失败 > html 实际上是我的 ui.xml 文件
  • 在浏览器中右击会有“Inspect”,或者使用浏览器的菜单打开开发者工具,里面会有一个叫做“Console”的标签。 .ui.xml 文件not 与 index.html 相同,它使用
  • 是的,我发现,我用 chrome 检查页面时得到的结果编辑了问题,在 index.html 内部有一个 iframe,在该 iframe 内部有另一个 head 和 body 构造在那个 body-tag 中有脚本,我只是省略了额外的 head 和 body 标签
  • iframe 无关紧要,这是它如何工作的内部细节,但它间接回答了我试图问的问题。浏览器控制台没有显示其他错误?我在这里只看到一个明显的问题,如果有帮助,我会给出答案,否则您使用材料小部件的方式可能有其他问题。

标签: java gwt material-design gwt-material-design


【解决方案1】:
@UiField(provided = true)
MaterialResources res;

provided=true 表示 .ui.xml 不需要创建此资源,因为您将在调用 createAndBind 之前提供它。不这样做可能会导致在尝试制作小部件时发生 NullPointerExceptions,这将导致此路径上没有内容可见。但是,您的 .ui.xml 中的任何内容实际上似乎都没有使用 res(除了在 ui:with 中声明,这就像将其声明为变量一样),因此您可能可以同时删除该字段和 ui:with指着它。

【讨论】:

  • 试过了(在 .ui.xml 和 .java 中取消注释),但页面上仍然没有内容
猜你喜欢
  • 2017-12-24
  • 2020-03-05
  • 2017-09-12
  • 2023-04-11
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多