GWT-许多类不受支持,但仍然有效

GWT-许多类不受支持,但仍然有效,gwt,Gwt,我正在使用GWT框架制作自己的应用程序。我说很多类都不受支持,比如Calendar、Connection、Statement、DriverManager、ResultSet等,但我可以用它来工作 这正常吗他们应该被替换吗 例如: 当应用程序启动时,它会加载一些带有按钮的流程面板。当我点击菜单\登录\按钮时,我进行异步调用 package org.sinfonet.client; public class PageMenuLogin extends FlowPanel { private

我正在使用GWT框架制作自己的应用程序。我说很多类都不受支持,比如Calendar、Connection、Statement、DriverManager、ResultSet等,但我可以用它来工作

这正常吗他们应该被替换吗

例如:

当应用程序启动时,它会加载一些带有按钮的流程面板。当我点击菜单\登录\按钮时,我进行异步调用

package org.sinfonet.client;

public class PageMenuLogin extends FlowPanel {
    private PageCenter center;
    public PageMenuLogin(PageCenter center) {
        this.center=center;
        designLogin();
    }

    public void designLogin() {
        final InlineLabel menu_login_label1=new InlineLabel("Username");
        menu_login_label1.setStyleName("menu_span");
        this.add(menu_login_label1);
        final TextBox menu_login_input1 = new TextBox();
        menu_login_input1.setText("admin");
        this.add(menu_login_input1);
        final InlineLabel menu_login_label2=new InlineLabel("Password");
        menu_login_label2.setStyleName("menu_span");
        this.add(menu_login_label2);
        final TextBox menu_login_input2 = new TextBox();
        menu_login_input2.setText("pass");
        this.add(menu_login_input2);
        Button menu_login_button=new Button("Login");
        this.add(menu_login_button);

        PageMenuLogin.this.center.getContent().clear();
        PageMenuLogin.this.center.getContent().add(new TitleContent("Homepage"));
        PageMenuLogin.this.center.getContent().add(new Main());

        final AsyncCallback<java.lang.Boolean> callCheckLogin = new AsyncCallback<java.lang.Boolean>() {
            public void onSuccess(Boolean result) {
                if(result) {
                    designLogout(menu_login_input1.getText());
                } else {
                    menu_err.setText("Username e password non validi");
                }
            }

            public void onFailure(Throwable caught) {
                menu_login_label1.setText("Comunicazione Fallita");
            }
        };

        menu_login_button.addClickHandler(new ClickHandler(){
            public void onClick(ClickEvent event) {
                getService().checkLogin(menu_login_input1.getText(), menu_login_input2.getText(), callCheckLogin);
            }
        });
    }

    public void designLogout(String login_user) {
        PageMenuLogin.this.center.getContent().add(new Profile(login_user));
    }

    public static GWTServiceAsync getService() {
        return GWT.create(GWTService.class);
    }
}
如果我能很好地理解的话,我不能在加载概要文件时调用数据库函数,因为它是一个客户机类


那么,我该如何修复它呢?我在加载配置文件时执行异步调用?

一件事是您可以将它们添加到代码中,并且IDE不会显示任何问题,另一件事是您的应用程序可以编译并作为GWT应用程序执行


查看文档。

一件事是您可以将它们添加到代码中,并且您的IDE不会显示任何问题,另一件事是您的应用程序可以作为GWT应用程序进行编译和执行


请看一下文档。

首先是几个指针

永远不要在*.server中包含任何内容 在*.client中的类中。 与上述相反的是 正确:不要将任何内容包含在 *.client位于*.server中的类中。 gwt rpc的服务器端点 在*.server中,以Impl结尾。 他们可以做服务器的事情。 gwt rpc的客户端端点 在*.client中,其中一个 以异步方式结束。另一个不是 附加任何东西。这两个 文件是接口,因此 没有逻辑。 将PageMenuLogin中的callCheckLogin替换为以下内容:

public class PageMenuLogin extends FlowPanel {
...
  public void designLogin() {
        final InlineLabel menu_login_label1 = new InlineLabel("Username");
        menu_login_label1.setStyleName("menu_span");
        this.add(menu_login_label1);
        final TextBox menu_login_input1 = new TextBox();
        menu_login_input1.setText("admin");
        this.add(menu_login_input1);
        final InlineLabel menu_login_label2 = new InlineLabel("Password");
        menu_login_label2.setStyleName("menu_span");
        this.add(menu_login_label2);
        final TextBox menu_login_input2 = new TextBox();
        menu_login_input2.setText("pass");
        this.add(menu_login_input2);
        Button menu_login_button = new Button("Login");
        this.add(menu_login_button);

        this.center.getContent().clear();
        this.center.getContent().add(new TitleContent("Homepage"));
        this.center.getContent().add(new Main());

        menu_login_button.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                getService().checkLogin(menu_login_input1.getText(),
                        menu_login_input2.getText(),
                        new AsyncCallback<Boolean>() {

                            @Override
                            public void onFailure(Throwable caught) {
                                menu_login_label1
                                        .setText("Comunicazione Fallita");
                            }

                            @Override
                            public void onSuccess(Boolean result) {
                                if (result) {
                                    designLogout(menu_login_input1.getText());
                                } else {
                                    menu_err.setText("Username e password non validi");
                                }
                            }
                        });
            }
        });
    }
    public final void designMainProfile() {

        PageMenuLogin.getService().foo(new AsyncCallback<Void>() {

            @Override
            public void onFailure(Throwable caught) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onSuccess(Void result) {
                // TODO Auto-generated method stub

            }
        });

    }
@Override
    public void foo() {
        Database mydb = Configuration.getDatabase();

        mydb.connetti();
        mydb.disconnetti();

    }
void foo();
void foo(AsyncCallback<Void> asyncCallback);
在GWTService中,添加以下内容:

public class PageMenuLogin extends FlowPanel {
...
  public void designLogin() {
        final InlineLabel menu_login_label1 = new InlineLabel("Username");
        menu_login_label1.setStyleName("menu_span");
        this.add(menu_login_label1);
        final TextBox menu_login_input1 = new TextBox();
        menu_login_input1.setText("admin");
        this.add(menu_login_input1);
        final InlineLabel menu_login_label2 = new InlineLabel("Password");
        menu_login_label2.setStyleName("menu_span");
        this.add(menu_login_label2);
        final TextBox menu_login_input2 = new TextBox();
        menu_login_input2.setText("pass");
        this.add(menu_login_input2);
        Button menu_login_button = new Button("Login");
        this.add(menu_login_button);

        this.center.getContent().clear();
        this.center.getContent().add(new TitleContent("Homepage"));
        this.center.getContent().add(new Main());

        menu_login_button.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                getService().checkLogin(menu_login_input1.getText(),
                        menu_login_input2.getText(),
                        new AsyncCallback<Boolean>() {

                            @Override
                            public void onFailure(Throwable caught) {
                                menu_login_label1
                                        .setText("Comunicazione Fallita");
                            }

                            @Override
                            public void onSuccess(Boolean result) {
                                if (result) {
                                    designLogout(menu_login_input1.getText());
                                } else {
                                    menu_err.setText("Username e password non validi");
                                }
                            }
                        });
            }
        });
    }
    public final void designMainProfile() {

        PageMenuLogin.getService().foo(new AsyncCallback<Void>() {

            @Override
            public void onFailure(Throwable caught) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onSuccess(Void result) {
                // TODO Auto-generated method stub

            }
        });

    }
@Override
    public void foo() {
        Database mydb = Configuration.getDatabase();

        mydb.connetti();
        mydb.disconnetti();

    }
void foo();
void foo(AsyncCallback<Void> asyncCallback);
在GWTServiceAsync中,添加以下内容:

public class PageMenuLogin extends FlowPanel {
...
  public void designLogin() {
        final InlineLabel menu_login_label1 = new InlineLabel("Username");
        menu_login_label1.setStyleName("menu_span");
        this.add(menu_login_label1);
        final TextBox menu_login_input1 = new TextBox();
        menu_login_input1.setText("admin");
        this.add(menu_login_input1);
        final InlineLabel menu_login_label2 = new InlineLabel("Password");
        menu_login_label2.setStyleName("menu_span");
        this.add(menu_login_label2);
        final TextBox menu_login_input2 = new TextBox();
        menu_login_input2.setText("pass");
        this.add(menu_login_input2);
        Button menu_login_button = new Button("Login");
        this.add(menu_login_button);

        this.center.getContent().clear();
        this.center.getContent().add(new TitleContent("Homepage"));
        this.center.getContent().add(new Main());

        menu_login_button.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                getService().checkLogin(menu_login_input1.getText(),
                        menu_login_input2.getText(),
                        new AsyncCallback<Boolean>() {

                            @Override
                            public void onFailure(Throwable caught) {
                                menu_login_label1
                                        .setText("Comunicazione Fallita");
                            }

                            @Override
                            public void onSuccess(Boolean result) {
                                if (result) {
                                    designLogout(menu_login_input1.getText());
                                } else {
                                    menu_err.setText("Username e password non validi");
                                }
                            }
                        });
            }
        });
    }
    public final void designMainProfile() {

        PageMenuLogin.getService().foo(new AsyncCallback<Void>() {

            @Override
            public void onFailure(Throwable caught) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onSuccess(Void result) {
                // TODO Auto-generated method stub

            }
        });

    }
@Override
    public void foo() {
        Database mydb = Configuration.getDatabase();

        mydb.connetti();
        mydb.disconnetti();

    }
void foo();
void foo(AsyncCallback<Void> asyncCallback);

如果您没有最后两个类中的任何一个,请告诉我,我们将备份几个步骤。

首先是几个指针

永远不要在*.server中包含任何内容 在*.client中的类中。 与上述相反的是 正确:不要将任何内容包含在 *.client位于*.server中的类中。 gwt rpc的服务器端点 在*.server中,以Impl结尾。 他们可以做服务器的事情。 gwt rpc的客户端端点 在*.client中,其中一个 以异步方式结束。另一个不是 附加任何东西。这两个 文件是接口,因此 没有逻辑。 将PageMenuLogin中的callCheckLogin替换为以下内容:

public class PageMenuLogin extends FlowPanel {
...
  public void designLogin() {
        final InlineLabel menu_login_label1 = new InlineLabel("Username");
        menu_login_label1.setStyleName("menu_span");
        this.add(menu_login_label1);
        final TextBox menu_login_input1 = new TextBox();
        menu_login_input1.setText("admin");
        this.add(menu_login_input1);
        final InlineLabel menu_login_label2 = new InlineLabel("Password");
        menu_login_label2.setStyleName("menu_span");
        this.add(menu_login_label2);
        final TextBox menu_login_input2 = new TextBox();
        menu_login_input2.setText("pass");
        this.add(menu_login_input2);
        Button menu_login_button = new Button("Login");
        this.add(menu_login_button);

        this.center.getContent().clear();
        this.center.getContent().add(new TitleContent("Homepage"));
        this.center.getContent().add(new Main());

        menu_login_button.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                getService().checkLogin(menu_login_input1.getText(),
                        menu_login_input2.getText(),
                        new AsyncCallback<Boolean>() {

                            @Override
                            public void onFailure(Throwable caught) {
                                menu_login_label1
                                        .setText("Comunicazione Fallita");
                            }

                            @Override
                            public void onSuccess(Boolean result) {
                                if (result) {
                                    designLogout(menu_login_input1.getText());
                                } else {
                                    menu_err.setText("Username e password non validi");
                                }
                            }
                        });
            }
        });
    }
    public final void designMainProfile() {

        PageMenuLogin.getService().foo(new AsyncCallback<Void>() {

            @Override
            public void onFailure(Throwable caught) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onSuccess(Void result) {
                // TODO Auto-generated method stub

            }
        });

    }
@Override
    public void foo() {
        Database mydb = Configuration.getDatabase();

        mydb.connetti();
        mydb.disconnetti();

    }
void foo();
void foo(AsyncCallback<Void> asyncCallback);
在GWTService中,添加以下内容:

public class PageMenuLogin extends FlowPanel {
...
  public void designLogin() {
        final InlineLabel menu_login_label1 = new InlineLabel("Username");
        menu_login_label1.setStyleName("menu_span");
        this.add(menu_login_label1);
        final TextBox menu_login_input1 = new TextBox();
        menu_login_input1.setText("admin");
        this.add(menu_login_input1);
        final InlineLabel menu_login_label2 = new InlineLabel("Password");
        menu_login_label2.setStyleName("menu_span");
        this.add(menu_login_label2);
        final TextBox menu_login_input2 = new TextBox();
        menu_login_input2.setText("pass");
        this.add(menu_login_input2);
        Button menu_login_button = new Button("Login");
        this.add(menu_login_button);

        this.center.getContent().clear();
        this.center.getContent().add(new TitleContent("Homepage"));
        this.center.getContent().add(new Main());

        menu_login_button.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                getService().checkLogin(menu_login_input1.getText(),
                        menu_login_input2.getText(),
                        new AsyncCallback<Boolean>() {

                            @Override
                            public void onFailure(Throwable caught) {
                                menu_login_label1
                                        .setText("Comunicazione Fallita");
                            }

                            @Override
                            public void onSuccess(Boolean result) {
                                if (result) {
                                    designLogout(menu_login_input1.getText());
                                } else {
                                    menu_err.setText("Username e password non validi");
                                }
                            }
                        });
            }
        });
    }
    public final void designMainProfile() {

        PageMenuLogin.getService().foo(new AsyncCallback<Void>() {

            @Override
            public void onFailure(Throwable caught) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onSuccess(Void result) {
                // TODO Auto-generated method stub

            }
        });

    }
@Override
    public void foo() {
        Database mydb = Configuration.getDatabase();

        mydb.connetti();
        mydb.disconnetti();

    }
void foo();
void foo(AsyncCallback<Void> asyncCallback);
在GWTServiceAsync中,添加以下内容:

public class PageMenuLogin extends FlowPanel {
...
  public void designLogin() {
        final InlineLabel menu_login_label1 = new InlineLabel("Username");
        menu_login_label1.setStyleName("menu_span");
        this.add(menu_login_label1);
        final TextBox menu_login_input1 = new TextBox();
        menu_login_input1.setText("admin");
        this.add(menu_login_input1);
        final InlineLabel menu_login_label2 = new InlineLabel("Password");
        menu_login_label2.setStyleName("menu_span");
        this.add(menu_login_label2);
        final TextBox menu_login_input2 = new TextBox();
        menu_login_input2.setText("pass");
        this.add(menu_login_input2);
        Button menu_login_button = new Button("Login");
        this.add(menu_login_button);

        this.center.getContent().clear();
        this.center.getContent().add(new TitleContent("Homepage"));
        this.center.getContent().add(new Main());

        menu_login_button.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                getService().checkLogin(menu_login_input1.getText(),
                        menu_login_input2.getText(),
                        new AsyncCallback<Boolean>() {

                            @Override
                            public void onFailure(Throwable caught) {
                                menu_login_label1
                                        .setText("Comunicazione Fallita");
                            }

                            @Override
                            public void onSuccess(Boolean result) {
                                if (result) {
                                    designLogout(menu_login_input1.getText());
                                } else {
                                    menu_err.setText("Username e password non validi");
                                }
                            }
                        });
            }
        });
    }
    public final void designMainProfile() {

        PageMenuLogin.getService().foo(new AsyncCallback<Void>() {

            @Override
            public void onFailure(Throwable caught) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onSuccess(Void result) {
                // TODO Auto-generated method stub

            }
        });

    }
@Override
    public void foo() {
        Database mydb = Configuration.getDatabase();

        mydb.connetti();
        mydb.disconnetti();

    }
void foo();
void foo(AsyncCallback<Void> asyncCallback);

如果您没有最后两个课程中的任何一个,请告诉我,我们将后退几步。

太好了。但是我需要这些类…我需要使用GWT类?GWT不支持Calendar、ResultSet或许多其他Java类。如果您需要它们,您可以创建一些对服务器端的调用来获取所需的信息,或者用JavaScript创建您自己的包装器。是的……我使用这个函数服务器端:例如,当我执行异步调用时,我使用语句或结果集从数据库中获取值。但是它们不受支持。如果我正确理解您的意思,您的问题是在异步调用中返回不受支持的类。您可以在服务器端使用任何您想要的Java类,但是当您将类返回到客户端GWT时,这些类必须是支持JREEmulation的。您应该将结果集转换为ArrayList,将日历转换为日期等等。Sadlyl周围没有工作。GWT将您的代码转换为JavaScript,因此它有一些限制。@markszzz:我觉得您在没有完全理解GWT的限制的情况下就跳进了GWT。请查看GWT页面,特别是如果您还有问题,请私下与我联系,我会尽力帮助您。但是我需要这些类…我需要使用GWT类?GWT不支持Calendar、ResultSet或许多其他Java类。如果您需要它们,您可以创建一些对服务器端的调用来获取所需的信息,或者用JavaScript创建您自己的包装器。是的……我使用这个函数服务器端:例如,当我执行异步调用时,我使用语句或结果集从数据库中获取值。但是它们不受支持。如果我正确理解您的意思,您的问题是在异步调用中返回不受支持的类。您可以在服务器端使用任何您想要的Java类,但是当您将类返回到客户端GWT时,这些类必须是支持JREEmulation的。您应该将结果集转换为ArrayList,将日历转换为日期等等。Sadlyl周围没有工作。GWT将您的代码转换为JavaScript,因此它有一些限制。@markszzz:我觉得您在没有完全理解GWT的限制的情况下就跳进了GWT。请查看GWT页面,特别是如果您还有问题,请私下与我联系,我会尽力帮助您。谢谢您的努力。不太清楚我在用你的代码做什么!事实上,我正在做2个异步调用,但我不确定。因此,如果我理解了的话:第一个异步调用是在我单击菜单\登录\按钮时启动的,它将加载用jav编码的概要文件类
ascript,客户端。第二个是在浏览器上加载Profile类时调用的,实际上,用JS编码的Profile类。正确吗?是的,两次rpc调用。一个做登录逻辑,一个做配置文件逻辑。第二个是foo,我只是为了将您的服务器代码移动到服务器而删除它,它没有做任何有用的事情。您必须向它传递一些参数和/或返回一个值。是的。现在已经清楚GWT是如何工作的,或者至少是基本功能!真的,伙计,谢谢,你让我开心:最后一件事:你说他与上述相反的话也是真的:永远不要在*.server的类中包含*.client中的任何内容。但是如果您查看.server包中常见的gwtservicepimpl,您可以看到import org.sinfonet.client.GWTService;但也许这是有意义的,因为GWTService只是一个接口@markzzz接得好。也有例外,rpc接口就是其中之一。感谢您的努力。不太清楚我在用你的代码做什么!事实上,我正在做2个异步调用,但我不确定。所以,如果我理解了的话:第一个异步调用在我单击菜单_login _按钮时启动,它将加载用javascript编码的概要文件类,客户端。第二个是在浏览器上加载Profile类时调用的,实际上,用JS编码的Profile类。正确吗?是的,两次rpc调用。一个做登录逻辑,一个做配置文件逻辑。第二个是foo,我只是为了将您的服务器代码移动到服务器而删除它,它没有做任何有用的事情。您必须向它传递一些参数和/或返回一个值。是的。现在已经清楚GWT是如何工作的,或者至少是基本功能!真的,伙计,谢谢,你让我开心:最后一件事:你说他与上述相反的话也是真的:永远不要在*.server的类中包含*.client中的任何内容。但是如果您查看.server包中常见的gwtservicepimpl,您可以看到import org.sinfonet.client.GWTService;但也许这是有意义的,因为GWTService只是一个接口@markzzz接得好。也有例外,rpc接口就是其中之一。