@Override
  public void renderHead(IHeaderResponse response) {
    super.renderHead(response);

    // initialize select2

    response.render(
        OnDomReadyHeaderItem.forScript(
            JQuery.execute("$('#%s').select2(%s);", getJquerySafeMarkupId(), settings.toJson())));

    // select current value

    renderInitializationScript(response);
  }
  @Override
  public void onEvent(IEvent<?> event) {
    super.onEvent(event);

    if (event.getPayload() instanceof AjaxRequestTarget) {

      AjaxRequestTarget target = (AjaxRequestTarget) event.getPayload();

      if (target.getComponents().contains(this)) {

        // if this component is being repainted by ajax, directly, we must destroy Select2 so it
        // removes
        // its elements from DOM

        target.prependJavaScript(
            JQuery.execute("$('#%s').select2('destroy');", getJquerySafeMarkupId()));
      }
    }
  }