Задача состоит в следующем - по нажатию на кнопку должен сработать переход по ссылке.
Java Script Native Interface позволяет Java разработчику работающему с GWT / GXT использовать в своем коде вставки на чистом JavaScript. У элемента ссылка есть метод click(), именно его мы и будем вызывать при помощи JSNI.
import com.extjs.gxt.ui.client.widget.Html;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Label;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
public class SomeForm {
// html фрагмент
private final Html templateLink;
// нативный метод, который вызывает метод click() у переданного ему элемента
public static native void click(final com.google.gwt.dom.client.Element el)
/*-{
el.click();}
-*/;
// адрес ссылки
private static final String TEMPLATE_URI = "some/uri";
public SomeForm()
{
...
// создаем кнопку и ее обработчик
// по щелчку на кнопке вызывается переход по сслыке
Button someButton = new Button("Some Button", new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(final ButtonEvent ce) {
com.google.gwt.dom.client.Element el =
Document.get().getElementById("jsniClick");
click(el);
}
});
// добавляем кнопку и ссылку на панель
ContentPanel cpLeft = new ContentPanel();
cpLeft.setHeaderVisible(false);
cpLeft.setBodyBorder(false);
cpLeft.setButtonAlign(HorizontalAlignment.LEFT);
cpLeft.addButton(someButton);
templateLink = new Html("<a id='jsniClick' href='" + TEMPLATE_URI + "'></a>");
cpLeft.add(new Label(templateLink.getHtml()));
add(cpLeft);
}
}
* This source code was highlighted with Source Code Highlighter.