0

我正在尝试在 GWT 上运行一个简单的应用程序,其中 Jsoup 获取一个 Wiki 页面,对其进行解析以找到一些文本,然后将该文本放入一个按钮中。我已将 Jsoup jar 文件放在所需的文件夹中(如您所见:)

在此处输入图像描述

导入工作正常,因为在代码的后面部分使用这些 Jsoup 类型变量没有显示错误。但我仍然收到这里看到的错误:

在此处输入图像描述

谁能告诉我我错在哪里?

4

4 回答 4

3

Jsoup 是一个服务器端处理jar。它没有 GWT 端口!!!

选项1 -

您需要分叉并将其移植到 GWT 兼容代码(如果它使用 GWT 不支持的 api 则不可能)以在客户端使用它。

选项 2 -

相反,您应该尝试仅在服务器端使用它。处理 wiki 页面并将文本字符串发送到客户端。

选项 3 -

GWT 中的类似第三方库 - http://code.google.com/p/gwt-html/

注意:它们并不总是得到维护。所以只有在你理解的情况下才使用它们。

于 2013-01-04T12:02:14.290 回答
1

最简单的方法是使用gwtquery(又名 gquery)。在最好的情况下,您的代码可能如下所示:

$(".myButton").load("file.html");

gwtquery 是 gwt 的 jquery api 的一个端口,jsoup 是相同的,但用于 jvm。Gquery 维护得很好。

这是将快照中的代码移植到 gquery 的示例:

// The target url should be in the same domain unless you configure CORS
GQuery.get("http://stats...", null, new Function() {
  public void f() { 
    $("<div>" + getDataObject() + "</div>") // wrap the server response in a div
      .find("p").each(new Function() {
        public void f() {
          System.out.println($(this).text());
        }
       });
  }
});
于 2013-01-04T15:31:57.260 回答
1

Jsoup 是一个服务器端库,您不能在您的 gwt 代码(位于 中的 java 类com.google.gwt.sample.stockwatcher.client)中使用它。

我在您的 StockWatcher 类 ( import org.jsoup.helper.Validate) 中看到一些未使用的导入,您必须删除它们(按Ctrl+ Shift+ O

于 2013-01-09T07:48:11.950 回答
1

虽然 Jsoup 被设计为一个服务器端库,但修改它以在客户端与 GWT 一起运行并非不可能。为了做到这一点,必须削减一些功能,并且必须删除任何使用 File 或 InputStream 的功能。我选择的 IDE 是 IntelliJ Idea,“查找用法”功能对于确定可以安全删除哪些功能以及必须模拟哪些其他功能非常有帮助。提一句建议,最好将您认为不需要的函数注释掉,而不是完全删除它,因为进一步检查后,您可能会发现您实际上需要修改或模拟该函数。

以下是我模拟的类或函数:

  • StringBuilder.appendCodePoint(int codePoint)
  • 字符集
  • 字符集编码器
  • String.format(final String 格式, final Object... args);

替代品:

  • java.util.Pattern 变为 com.google.gwt.regexp.shared.RegExp。
  • Map loadEntities(String filename) 可以硬编码。

如果您想接受我的工作,可以在这里下载: http ://www.mediafire.com/download/b3le77rrvc33vpa/Jsoup.zip
免责声明:您可以将此文件用作我上面概述的步骤的参考,但我不能保证在删除与 GWT 不兼容的代码的过程中的某个地方我没有引入 XSS 攻击的可能性。如果您发现这样的错误,请告诉我。

于 2013-09-10T07:11:23.220 回答