How to specify a button to open an URL?
Asked Answered
A

3

12

I want to write a web application that triggers the default email client of the user to send an email.

Thus, I created a Link, that leads to an URL conforming to the mailto URI scheme (http://en.wikipedia.org/wiki/Mailto):

Link emailLink = new Link("Send Email", 
    new ExternalResource("mailto:[email protected]"));

However, instead of using a Link, I want to provide a Button that allows to trigger the respective functionality. But, for buttons I cannot set an ExternalResource to be opened.

Does anybody know to solve this problem for Buttons, or how to create a Link that looks and behaves exactly like a button? I also tried some CCS modification but did not manage the task by myself. I also found some solutions for former Vaadin versions (https://vaadin.com/forum/#!/thread/69989), but, unfortunately they do not work for Vaadin 7.

Adopt answered 12/3, 2014 at 14:41 Comment(4)
Use CSS to make your link look like a button.Knute
Well, this sound easy, however my application is using a big CCS theme with many classes and properties for Buttons (including hover stuff etc.). Is there an easy way to apply all theses CCS classes to the respective Link?Adopt
Make sure the link has the correct class and/or id? What have you tried? You could also google "html make button open link".Knute
You might find this similar Question helpful: Vaadin: open new window with ABSOLUTE url path from a BUTTONLemures
B
14

I remember solving a similar problem using a ResourceReference.

Button emailButton = new Button("Email");
content.addComponent(emailButton);
Resource res = new ExternalResource("mailto:[email protected]");
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);
    }
});
Bacchanal answered 13/3, 2014 at 9:54 Comment(1)
Works like a charm in Google Chrome. However, in my Opera (v. 12.16) nothing happens at all. Any idea why?Adopt
A
2

For solving similar issue, I applied previously:

    String email="[email protected]";
    Link l=new Link();
    l.setResource(new ExternalResource("mailto:" + email));
    l.setCaption("Send email to " + email);
    addComponent(l);
Alumina answered 9/7, 2015 at 10:1 Comment(0)
A
0

After some further tries a managed to adapt the proposed LinkButton solution from https://vaadin.com/forum/#!/thread/69989 for 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");
            }
        });
    }
}

However, this solution is still not perfect as it causes the opening of a popup window being blocked by some web browsers.

Adopt answered 12/3, 2014 at 15:18 Comment(1)
Consider using kris54321' approach, using Resources and Reference is safer than just operating on Strings. Plus: you wont solve the "some browsers block pop ups" problem, thats client config. Consider a world where the ad can decide to ignore popup blockers ... In a company where every user uses the same browser you might succeed via central policies.Neckpiece

© 2022 - 2024 — McMap. All rights reserved.