如何在运行时添加的GWT中加载java类

如何在运行时添加的GWT中加载java类,gwt,Gwt,我想做的是给用户一个上传GWT组合的选项 当用户上传一个java类(这是一个带有GWT小部件的布局)时,我们的应用程序将显示该布局 让我们看看它的LoginPageView.java类 现在我要做的是,上传之后,我将该类放在某个客户机包中,因此该类现在是com.test.Client.LoginPageView.java 现在要打开这个类并显示布局,我必须 LoginPageView loginView = new LoginPageView(); RootPanel().ge

我想做的是给用户一个上传GWT组合的选项

当用户上传一个java类(这是一个带有GWT小部件的布局)时,我们的应用程序将显示该布局

让我们看看它的LoginPageView.java类

现在我要做的是,上传之后,我将该类放在某个客户机包中,因此该类现在是com.test.Client.LoginPageView.java

现在要打开这个类并显示布局,我必须

    LoginPageView loginView = new LoginPageView();

    RootPanel().get().add(loginView );
它将显示上传的布局

但是我不知道类的名称,因为它是在运行时添加的,所以类的加载将在运行时进行,但是如何在客户端实现呢

有办法吗


谢谢,GWT将Java代码编译成JavaScript。这发生在应用程序部署之前。用户的浏览器从服务器读取JavaScript文件并执行它

现在,如果用户向您提供了一个新的LoginPage Java类,那么您需要将该类复制到Eclipse中的项目中(例如),运行GWT编译器来创建所有新的排列,将新代码部署到服务器上,并要求您的用户再次加载应用程序


如果第二个用户为您提供了不同的LoginPage类,则您必须为该用户创建不同版本的应用程序,或者将这两个LoginPage类添加到您的项目中,并以某种方式决定为每个用户提供哪个LoginPage类。这是可能的,但随着您添加到项目中的每个新自定义类,项目的规模将不断增长。

GWT将Java代码编译成JavaScript。这发生在应用程序部署之前。用户的浏览器从服务器读取JavaScript文件并执行它

现在,如果用户向您提供了一个新的LoginPage Java类,那么您需要将该类复制到Eclipse中的项目中(例如),运行GWT编译器来创建所有新的排列,将新代码部署到服务器上,并要求您的用户再次加载应用程序


如果第二个用户为您提供了不同的LoginPage类,则您必须为该用户创建不同版本的应用程序,或者将这两个LoginPage类添加到您的项目中,并以某种方式决定为每个用户提供哪个LoginPage类。这是可能的,但您的项目的大小将随着您添加到其中的每个新自定义类而不断增长。

谢谢,但即使在这之后,我将如何在运行时打开loginPage类,我将如何实现这一点:LoginPageView loginView=new LoginPageView();RootPanel().get().add(loginView)。。。代码将是什么而不是上面的代码,因为这将发生在运行时,而不是这个LoginPageView,用户可以添加任何东西,需要打开自己,当应用程序将再次加载时(如u所说),如果它在服务器端,我可以使用class.forname。在运行时加载类,但不确定GWT客户端是否有任何方法可以在运行时加载类,正如Andrei在回答中所说,没有。GWT必须已经知道这些类,它不能在运行时从服务器代码创建新的JS。运行时没有“Java”,只有JavaScript。您可以从用户处获取HTML+JavaScript并在运行时注入它们,但这将是非常不安全的。谢谢,但即使在这之后,我如何在运行时打开loginPage类,我将如何实现这一点:LoginPageView loginView=new LoginPageView();RootPanel().get().add(loginView)。。。代码将是什么而不是上面的代码,因为这将发生在运行时,而不是这个LoginPageView,用户可以添加任何东西,需要打开自己,当应用程序将再次加载时(如u所说),如果它在服务器端,我可以使用class.forname。在运行时加载类,但不确定GWT客户端是否有任何方法可以在运行时加载类,正如Andrei在回答中所说,没有。GWT必须已经知道这些类,它不能在运行时从服务器代码创建新的JS。运行时没有“Java”,只有JavaScript。您可以从用户处获取HTML+JavaScript,并在运行时注入它们,但这是非常不安全的。