将链接/图像添加到GwtBootstrap popover组件

时间:2018-01-16 16:17:04

标签: javascript java gwt gwt-bootstrap

我正在使用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);

然后使用其中一个解决方案Calling GWT Java function from JavaScript

调用Java方法

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

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

1 个答案:

答案 0 :(得分: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。