如何在gwt中点击字符串中的url

时间:2016-01-18 09:16:08

标签: java gwt

如果我有一个字符串:

String textWithUrl = "I am a string and http://www.google.com is the url to google";

然后我把它放在HTML元素中:

HTML html = new HTML(textWithUrl);

但该链接无法点击。通常我会点击它(从未使用Label进行测试):

private String makeUrlInTextClickable(String text) {

    if (text == null) return "";

    String[] words = text.split(" ");
    String textWithUrl = text;

    for (String word : words) {
      // Maybe more checks are needed to prevent typos like abcdhttp://
      // Mostly the texts come from a source, in which the urls are likely to be valid
      if (word.toLowerCase().contains("http://")) textWithUrl = textWithUrl.replace(word, "<a target=\"_blank\" href=\"" + word + "\">" + word + "</a>");
    }

    return textWithUrl;
}

textWithUrl可以是任意长度,里面有很多网址。

有更好的方法吗?

编辑:

使用示例:

public class Test implements EntryPoint {

    @Override
    public void onModuleLoad() {

        String textWithUrl = "I am a string and http://www.google.com is the url to google";
        RootPanel.get().add(new HTML(makeUrlInTextClickable(textWithUrl)), 0, 0);
    }
}

然后输出只是一个带有可点击的谷歌网址的HTML小部件

4 个答案:

答案 0 :(得分:1)

传统&#34;链接&#34;你可能想到的风格是一个锚。它将是蓝色(或浏览器链接颜色)并加下划线。点击处理程序将触发您提供的网址。

Anchor link = new Anchor("www.linktositehere.com");

只要使用标签实现它,您只需创建一个标签并为其添加自定义单击处理程序。在你的uibinder(或java代码)中,你可以将标签的样式看起来像你喜欢的任何东西。

    Label labelLink = new Label("www.linktositehere.com");

    labelLink.addClickHandler(new ClickHandler()
    {

        @Override
        public void onClick(ClickEvent event)
        {
            Window.Location.assign("www.linktositehere.com");
        }
    });

答案 1 :(得分:1)

这不是特定于GWT的,但是有很多JavaScript库可以满足您的需求。你可以简单地从GWT中包含并调用JS,这应该是一个可行的解决方案。

这里有一个关于这个主题的答案:

How to replace plain URLs with links?

但为了完整性,这些是推荐的库:

两者都有一个实时演示功能,您可以自己测试它。显然,它们都不会覆盖你的边缘情况,但它仍然值得一看。

答案 2 :(得分:0)

如果您想显示链接,则必须使用锚标记

如果您想使用HTML小部件,则有两个选项:

  1. 制作一个HTML代码字符串,并将该字符串附加到HTML窗口小部件,就像您在代码中所做的那样。
  2. 使用GWT提供的任何HTML元素(例如AnchorElement)并使用HTML小部件中的wrap()方法将其包装在WHERE窗口小部件下。
  3. 希望这有帮助。

答案 3 :(得分:0)

我通常使用以下两种解决方案之一:

1)如果应用程序中发生了某些事情,我在Anchor上设置了一个ClickHandler:

Anchor link = new Anchor("text");
link.addClickHandler(new ClickHandler() {
  @Override
  public void onClick(ClickEvent clickEvent) {
  ...        
  }
});

2)对于打开新浏览器窗口的外部链接,我通常只使用以下HTML:

HTML link = new HTML("<a href=\"" + link + "/\" target=\"_blank\">" + text + "</a>");