Поиск по этому блогу

вторник, 21 августа 2012 г.

Небольшой пример работы с JSNI в GWT/GXT


Задача состоит в следующем - по нажатию на кнопку должен сработать переход по ссылке.
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.