Как указать кнопку для открытия URL-адреса?
Я хочу написать веб-приложение, которое запускает почтовый клиент по умолчанию для отправки электронной почты.
Таким образом, я создал ссылку, которая приводит к URL-адресу, соответствующему схеме URI mailto (http://en.wikipedia.org/wiki/Mailto):
Link emailLink = new Link("Send Email",
new ExternalResource("mailto:[email protected]"));
Однако вместо использования ссылки я хочу предоставить кнопку, которая позволяет запускать соответствующие функции. Но для кнопок я не могу установить ExternalResource для открытия.
Кто-нибудь знает, как решить эту проблему для кнопок, или как создать ссылку, которая выглядит и ведет себя точно так же, как кнопка? Я также пробовал некоторые модификации CCS, но сам не справился с этой задачей. Я также нашел некоторые решения для прежних версий Vaadin (https://vaadin.com/forum/#!/thread/69989), но, к сожалению, они не работают для Vaadin 7.
Ответы
Ответ 1
Я помню решение аналогичной проблемы с помощью 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);
}
});
Ответ 2
Для решения аналогичной проблемы я применил ранее:
String email="[email protected]";
Link l=new Link();
l.setResource(new ExternalResource("mailto:" + email));
l.setCaption("Send email to " + email);
addComponent(l);
Ответ 3
После некоторых дальнейших попыток удалось адаптировать предлагаемое решение LinkButton от https://vaadin.com/forum/#!/thread/69989 для 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");
}
});
}
}
Однако это решение по-прежнему не идеально, поскольку оно вызывает открытие всплывающего окна некоторыми веб-браузерами.