如何指定打开URL的按钮?

时间:2014-03-12 14:41:37

标签: button vaadin mailto vaadin7

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

因此,我创建了一个链接,它导致符合mailto URI方案的URL(http://en.wikipedia.org/wiki/Mailto):

Link emailLink = new Link("Send Email", 
    new ExternalResource("mailto:someone@example.com"));

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

有没有人知道为Buttons解决这个问题,或者如何创建一个看起来和行为完全像按钮的链接?我也尝试了一些CCS修改,但没有自己管理任务。我还为前Vaadin版本(https://vaadin.com/forum/#!/thread/69989)找到了一些解决方案,但不幸的是它们不适用于Vaadin 7.

3 个答案:

答案 0 :(得分:14)

我记得使用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);
    }
});

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

经过一些进一步的尝试后,我们设法为Vaadin 7调整了https://vaadin.com/forum/#!/thread/69989的建议LinkBut​​ton解决方案:

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浏览器阻止。