Возможно ли использовать RestyGwt и GWT Material Design вместе? - PullRequest
0 голосов
/ 18 апреля 2019

Я настраиваю новый проект и хочу использовать RestyGwt и Gwt Material Design вместе, но когда я добавляю RestyGWT в модуль GWT, я получаю ClassCastException на стороне клиента.

Я попытался понизить версию GWT Material Design до версии 2.0 и добавить следующие строки в модуль GWT и пом.

<inherits name="com.google.gwt.user.theme.clean.Clean" />
<inherits name="com.github.nmorel.gwtjackson.GwtJackson" />
<dependency>
    <groupId>com.github.nmorel.gwtjackson</groupId>
    <artifactId>gwt-jackson</artifactId>
    <version>0.14.2</version>
</dependency>

ClassCastException не связано с классом Person. Та же проблема возникает, когда я добавляю пустой MaterialDataTable (или другие более сложные компоненты, чем кнопка или метка) для RootPanel.

StackTrace

Error: java.lang.ClassCastException
    at RCc_g$.ah_g$ [as createError_0_g$] (Throwable.java:120)
    at RCc_g$.kh_g$ [as initializeBackingError_0_g$] (Throwable.java:112)
    at RCc_g$.Vg_g$ (Throwable.java:66)
    at RCc_g$.zh_g$ (Exception.java:29)
    at RCc_g$.Hh_g$ (RuntimeException.java:29)
    at new RCc_g$ (ClassCastException.java:27)
    at U0d_g$ (InternalPreconditions.java:154)
    at e1d_g$ (InternalPreconditions.java:138)
    at d1d_g$ (InternalPreconditions.java:133)
    at $_b_g$ (Cast.java:75)
    at sse_g$.tse_g$ [as setDisplay_1_g$] (FlexboxMixin.java:67)
    at sse_g$.Fse_g$ [as setGwtDisplay_0_g$] (FlexboxMixin.java:43)
    at Igg_g$.kie_g$ [as setGwtDisplay_0_g$] (MaterialWidget.java:400)
    at Pzi_g$.Mri_g$ [as setup_1_g$] (AbstractDataView.java:588)
    at kLi_g$.FJi_g$ [as onLoad_0_g$] (AbstractDataTable.java:153)
    at kLi_g$.ELi_g$ [as onLoad_0_g$] (MaterialDataTable.java:92)
    at kLi_g$.Eqc_g$ [as onAttach_0_g$] (Widget.java:359)
    at kLi_g$.Mqc_g$ [as setParent_0_g$] (Widget.java:484)
    at Ptc_g$.Uqc_g$ [as adopt_0_g$] (Panel.java:124)
    at Ptc_g$.erc_g$ [as add_6_g$] (ComplexPanel.java:105)
    at Ptc_g$.zrc_g$ [as add_4_g$] (AbsolutePanel.java:99)
    at K1d_g$.L1d_g$ [as onModuleLoad_0_g$] (Example.java:51)
    at Array.c3b_g$ (pl_00046solidmcg_00046cerber_00046webgwt_00046Cerber__EntryMethodHolder.java:3)
    at initializeModules_0_g$ (ModuleUtils.java:44)
    at Dp_g$ (Impl.java:309)
    at Gp_g$ (Impl.java:368)
    at Impl.java:78
    at w2b_g$ (ModuleUtils.java:55)
    at Example.java:122

GWT модуль

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<module rename-to="Example">
    <inherits name='com.google.gwt.user.User'/>

    <inherits name="gwt.material.design.GwtMaterialWithJQuery" />
    <inherits name="gwt.material.design.addins.GwtMaterialAddins" />
    <inherits name="gwt.material.design.themes.ThemeBlue"/>
    <inherits name="gwt.material.design.GwtMaterialTable" />

    <inherits name="org.fusesource.restygwt.RestyGWT"/>

    <entry-point class="com.Example"/>

    <source path=''/>

    <extend-property name="locale" values="pl_PL"/>
    <set-property-fallback name="locale" value="pl_PL"/>
    <set-property name="locale" value="pl_PL"/>
</module>

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>example-web-pom</artifactId>
        <groupId>com.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>example-web-gwt</artifactId>
    <packaging>war</packaging>

    <properties>
        <war.name>example</war.name>
        <gwt.material.version>2.1.1</gwt.material.version>
        <maven.deploy.skip>true</maven.deploy.skip>
        <maven.install.skip>true</maven.install.skip>
        <gwt.version>2.8.2</gwt.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-user</artifactId>
            <version>${gwt.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.github.gwtmaterialdesign</groupId>
            <artifactId>gwt-material</artifactId>
            <version>${gwt.material.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.github.gwtmaterialdesign</groupId>
            <artifactId>gwt-material-addins</artifactId>
            <version>${gwt.material.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.github.gwtmaterialdesign</groupId>
            <artifactId>gwt-material-themes</artifactId>
            <version>${gwt.material.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.github.gwtmaterialdesign</groupId>
            <artifactId>gwt-material-jquery</artifactId>
            <version>${gwt.material.version}</version>
        </dependency>
        <dependency>
            <groupId>com.github.gwtmaterialdesign</groupId>
            <artifactId>gwt-material-table</artifactId>
            <version>${gwt.material.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava-gwt</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>gwt-maven-plugin</artifactId>
                <version>${gwt.version}</version>
                <executions>
                    <execution>
                        <id>Compile</id>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <runTarget>index.html</runTarget>
                    <port>${gwt.port}</port>
                    <productionMode>true</productionMode>
                    <extraJvmArgs>-Xmx2048M -Xms512M</extraJvmArgs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>exploded</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <warName>${war.name}</warName>
                    <webResources>
                        <resource>
                            <directory>src/main/webapp</directory>
                            <filtering>true</filtering>
                            <excludes>
                                <exclude>**/*.swf</exclude>
                                <exclude>**/*.png</exclude>
                                <exclude>**/*.gif</exclude>
                                <exclude>**/*.wav</exclude>
                            </excludes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>
        </plugins>

        <filters>
            <filter>${project.basedir}/src/main/filters/gwt_app.properties</filter>
        </filters>
    </build>
</project>

EntryPoint

package com.example;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;

import gwt.material.design.client.ui.table.MaterialDataTable;

public class Example implements EntryPoint {

    @Override
    public void onModuleLoad() {

        MaterialDataTable<Person> materialTable = new MaterialDataTable<>();

        Person person = new Person();
        person.setName("name");
        person.setSurnName("surname");

        List<Person> personList = new ArrayList<>();
        personList.add(person);

        materialTable.setRowData(0, personList);

        RootPanel.get().add(materialTable);
    }

    public static class Person {
        private String name;
        private String surnName;


        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getSurnName() {
            return surnName;
        }

        public void setSurnName(String surnName) {
            this.surnName = surnName;
        }
    }
}
...