0

我正在使用 GWtBootstrap 的 Popover 组件 - org.gwtbootstrap3.client.ui.Popover。我需要添加一些调用 java 方法的可点击图像。由于 popover 不允许您在其内容中添加任何小部件,我可以使用以下代码添加链接

final Popover popover = new Popover();
final SafeHtml html = new SafeHtmlBuilder().appendHtmlConstant("<a href='' title='test add link'>link on content</a>").toSafeHtml();
popover.setHtml(html);

然后使用此处的解决方案之一调用 Java 方法从 JavaScript 调用 GWT Java 函数

但是这一切看起来有点难看,我也认为使用原始 html 添加链接/图像非常脆弱并且容易受到攻击。

有没有更好的方法让 Popover 的内容具有 GWT 小部件以便我们可以更好地控制它们,可能扩展 Popover 类可能是一种选择。任何建议/提示/解决方案都会有很大帮助。

4

1 回答 1

0

此问题的一种解决方案是在弹出框外部创建一个适当的 GWT 按钮 (ButtonA),该按钮执行与弹出框中的按钮相同的操作。使用如下的 html 代码,我们可以创建一个依次单击 ButtonA 的按钮。我使用类似这种方法的方法来做到这一点。

Popover createPopoverWithButton(Runnable buttonAAction, String id)
{
    SafeHtml popoverButtonHtml= new SafeHtmlBuilder()
                .appendHtmlConstant("<button type=\"button\" id=\"myPopoverButton\" onclick=\"document.getElementById(\'" + id
                        + "\').click()\">Click to invoke java method</button>");
    Popover popover = new Popover("Title", popoverButtonHtml.asString());
    Button buttonA = new Button();
    buttonA.setId(id);
    buttonA.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(final ClickEvent event) {
                buttonAAction.run();
            }

        });
        buttonA.setVisible(false);
   return popover;
}

正如我之前所说,这是对我在问题中描述的初始方法的改进。对此的任何改进都非常受欢迎,因为该解决方案仍然具有我们打算在 GWT 中避免的 HTML/Javascript。

于 2018-01-18T08:53:24.020 回答