2013-09-25 28 views
0

我是GWT的新手,我需要重新解决这个问题。我需要用gwt-links创建一个小部件。要做到这一点,我需要从本体中获取一些数据,然后根据结果创建图。问题是,当我将java代码与gwt代码混合时,它不想编译。从java代码创建并返回gwt小部件

问题是,我如何创建一个widged解释上面将放置在一个http页面?

现在,该代码如下所示:

public class Example1 { 

    @Override 
    public void draw() { 

     // Create the elements 

     String ontology = Ontology.get(1); 

     Widget labelHello = new BoxLabel(ontology); 
     controller.addWidget(labelHello,25,115); 


     // Add DnD logic 
     PickupDragController dragController = new PickupDragController(controller.getView(), true); 
     dragController.makeDraggable(labelHello); 


    } 


    public Widget asWidget() { 
     return controller.getView(); 
    } 

} 

的Ontology.get()不希望进行编译。

+0

你能提供一个堆栈跟踪吗? – otonglet

回答

1

GWT无法编译任何Java代码。

这些是由GWT仿真软件包:pls read

不能被翻译成JavaScript代码,(不是模拟的东西),你必须处理在服务器端。

+0

在大多数情况下,您可以在客户端代码中重新实现无法翻译为javascript的代码(即像StringUtils这样的库)。 – otonglet

+0

是的,你是对的。有时候,如果可能的话在服务器端移动这些代码会更容易。 – Spiff

+0

我的猜测是@ user2816447没有意识到无法将任何Java库编译为JavaScript。 – Spiff

0

我真的不想将代码编译为javascript。我想要做的就是创建一个GWT小部件(这是一个图)。

要创建小部件,我需要做一些计算和存储库获取。我不想翻译它(存储库提取),我只需要使用它来创建图的模型。

基本上,这是我想做的事:

String l = Repository.getLabel(); // Some advanced calculations that use many JavaSE classes; 
GWTWidget widget = new GWTWidget(l); // widget, that will be displayed on a page. 

但是当我把东西方法onModuleLoad它不会编译。

这可能是一个简单的问题,但我并不真正与GWT有关,而且我被迫重拍某人的作品。


public void onModuleLoad() { 
     System.out.println("tes"); 
     VerticalPanel mainPanel = new VerticalPanel(); 
     RootPanel.get().add(mainPanel); 

     // 
     ISolver solver = null; 
     System.out.println("TEST2"); 
    } 
ERROR: Line 53: No source code is available for type pr.ISolver; did you forget to inherit a required module? 
    ERROR: Unable to find type 'client.Link' 
    ERROR: Hint: Previous compiler errors may have made this type unavailable 

等线路sthat与启动 “否源代码..”。

ISolver是一个接口,但我不想翻译它。我想用它来计算。

+0

请发布例外 – Spiff

+0

问题是,Java被翻译成Javascript,这就是GWT的工作原理,这就是为什么浏览器没有插件执行GWT应用程序。 – Spiff

+0

更新!!!!!!!! – user2816447

1

GWT projects使用三个包(默认)

com.myapp.client 
com.myapp.shared 
com.myapp.server 

通过共享和客户端包内默认的一切都将是compiled to JavaScript。 每一个类,其被导入到一类,它是内部的共享和客户机包必须是:

  1. 通过GWT仿真
  2. 可编译到GWT
  3. 可编译(和客户端或共享封装内)到GWT(并且包必须是* .gwt中的白名单)xml)

如果您的代码为ISolver可以编译为JavaScript,您将不得不创建一个module.gwt.xml,并从此模块继承您的项目。这可能使GWT编译器能够将ISolver(及其实现)编译为JavaScript。

如果您的代码无法编译为GWT,您将必须使用write a remote-service进行计算。

+0

谢谢你的回答。看起来像远程服务是解决方案。如果它在服务器端,它是否可以返回/传递一个gwt对象(一个小部件),以便以后转换为JavaScript并放置在页面上? – user2816447

+0

不,您应该在客户端创建Widget,并在从服务器获取它们后设置值。您也可以向服务器询问值并在成功处理程序中创建小部件。 –