Button 如何指定打开URL的按钮?

Button 如何指定打开URL的按钮?,button,vaadin,mailto,vaadin7,Button,Vaadin,Mailto,Vaadin7,我想编写一个web应用程序,触发用户的默认电子邮件客户端发送电子邮件 因此,我创建了一个链接,该链接指向符合mailto URI方案()的URL: 但是,我不想使用链接,而是想提供一个按钮,允许触发相应的功能。但是,对于按钮,我无法设置要打开的ExternalResource 有没有人知道如何解决按钮的这个问题,或者如何创建一个外观和行为完全像按钮的链接?我还尝试了一些CCS修改,但没有自己管理任务。我还为以前的Vaadin版本()找到了一些解决方案,但不幸的是,它们不适用于Vaadin 7。在

我想编写一个web应用程序,触发用户的默认电子邮件客户端发送电子邮件

因此,我创建了一个链接,该链接指向符合mailto URI方案()的URL:

但是,我不想使用链接,而是想提供一个按钮,允许触发相应的功能。但是,对于按钮,我无法设置要打开的ExternalResource


有没有人知道如何解决按钮的这个问题,或者如何创建一个外观和行为完全像按钮的链接?我还尝试了一些CCS修改,但没有自己管理任务。我还为以前的Vaadin版本()找到了一些解决方案,但不幸的是,它们不适用于Vaadin 7。

在进一步尝试后,我成功地将建议的LinkButton解决方案从中改编为适用于Vaadin 7:

public class LinkButton extends Button {
    public LinkButton(final String url, String caption) {
        super(caption);
        setImmediate(true);
        addClickListener(new Button.ClickListener() {
            private static final long serialVersionUID = -2607584137357484607L;

            @Override
            public void buttonClick(ClickEvent event) {
                LinkButton.this.getUI().getPage().open(url, "_blank");
            }
        });
    }
}

但是,此解决方案仍然不完美,因为它会导致某些web浏览器阻止弹出窗口的打开。

我记得使用ResourceReference解决了类似的问题

Button emailButton = new Button("Email");
content.addComponent(emailButton);
Resource res = new ExternalResource("mailto:someone@example.com");
final ResourceReference rr = ResourceReference.create(res, content, "email");

emailButton.addClickListener(new Button.ClickListener() {

    @Override
    public void buttonClick(ClickEvent event) {
        Page.getCurrent().open(rr.getURL(), null);
    }
});

为了解决类似问题,我以前申请过:

    String email="info@ORGNAME.org";
    Link l=new Link();
    l.setResource(new ExternalResource("mailto:" + email));
    l.setCaption("Send email to " + email);
    addComponent(l);

使用CSS使你的链接看起来像一个按钮。好吧,这听起来很简单,但是我的应用程序使用了一个大的CCS主题,有许多按钮的类和属性(包括悬停等等)。是否有一种简单的方法将所有这些CCS类应用于相应的链路?确保链路具有正确的类和/或id?你试过什么?你也可以谷歌“HTML制作按钮打开链接”。你可能会发现这个类似的问题有帮助:考虑使用KRIS54 321的方法,使用资源和引用比在字符串上操作更安全。另外:您无法解决“某些浏览器阻止弹出窗口”的问题,这是客户端配置。考虑一个广告可以决定忽略弹出窗口的世界…在一个每个用户都使用同一个浏览器的公司里,通过中央政策,你可能会成功。谷歌Chrome的魅力就在于此。然而,在我的歌剧(12.16节)中,什么都没有发生。知道为什么吗?
    String email="info@ORGNAME.org";
    Link l=new Link();
    l.setResource(new ExternalResource("mailto:" + email));
    l.setCaption("Send email to " + email);
    addComponent(l);