Wicket AutoCompleteTextField (оба вида) имеют ошибки в ModalWindows

В Wicket есть 2 версии AutoCompleteTextField, одна в расширениях калитки, а другая в com.googlecode.wicket. Я пытаюсь использовать один из них в Wicket ModalWindow, но у меня возникают проблемы с обоими.

Обе версии обычно работают на веб-странице без использования модальных окон, но мне нужны они внутри одного. Существует несколько ограниченных примеров, но ничего особенного для модальных диалогов.

Версия расширения калитки:

Использование калитки 6.11.0

final AutoCompleteTextField<T> field = new AutoCompleteTextField<T>( "component", getSelectionModel(), theclass, new AutoCompleteSettings() ) {

      private static final long serialVersionUID = 1L;

      @Override
      protected Iterator<T> getChoices( String input ) {
        return AutoCompleteSelect.this.getChoices( input ).iterator();
      }
    };
    field.setOutputMarkupPlaceholderTag( true );
    field.add( new AjaxFormComponentUpdatingBehavior( "change" ) {

      private static final long serialVersionUID = 1L;

      @Override
      protected void onUpdate( AjaxRequestTarget target ) {
        System.out.println( "Item selected! " + getSelectionModel().getObject() );
        // This is never called!
      }
    } );
    add( field );

Первоначально у меня были проблемы с тем, чтобы заставить это работать вообще, пока я не понял, что он не выбирает варианты, пока вы не нажмете клавишу «вниз». Если я помещу один в ModalWindow, его всплывающее окно испортится, и предложения появятся в правом нижнем углу экрана. Перемещение диалогового окна в правый нижний угол экрана усугубляет проблему.

Вопросы:

  • Как сделать так, чтобы всплывающее окно появлялось при вводе текста в текстовое поле, а не при нажатии клавиши «вниз»?
  • Как лучше всего получить вызов в стиле ajax onSelected (например, в версии Google?) В примерах калитки есть версия [1], который зависит от отправки формы, но это бесполезно, если вам это нужно до этого.

Версия Google:

Использование com.googlecode.wicket-jquery-ui версии 6.11.0

ITextRenderer<T> renderer = new ITextRenderer<T>() {

  private static final long serialVersionUID = 1L;

  @Override
  public String getText( T object ) {
    return object == null ? "" : object.toString();
  }

  @Override
  public String getText( T object, String expression ) {
    return object == null ? "" : expression + "." + object.toString();
  }
};
final AutoCompleteTextField<T> field = new AutoCompleteTextField<T>( "component", getSelectionModel(), renderer, m_class ) {

  private static final long serialVersionUID = 1L;

  protected void onSelected( AjaxRequestTarget target ) {
    System.out.println( "Item " + getSelectionModel().getObject() + " has been selected" );

  }

  @Override
  protected List<T> getChoices( String input ) {
    return AutoCompleteSelect.this.getChoices( input );
  }
};

Хотя изначально это работает лучше (onSelected полезен, и всплывающее окно появляется в правильном месте), размещение его в модальном диалоговом окне приводит к тому, что всплывающее окно появляется под диалоговым окном. Это можно исправить, изменив z-индекс с помощью CSS (немного запутанно, но работает), но, похоже, есть событие, которое скрывает всплывающее окно всякий раз, когда вы наводите на него курсор, что означает, что ничего нельзя выбрать.

  • Кому-нибудь удалось остановить исчезновение всплывающего окна?
  • Есть ли лучший способ справиться с проблемой z-index?

Примеры расширения калитки: http://www.wicket-library.com/wicket-examples/ajax/autocomplete?0 Примеры Google: http://www.7thweb.net/wicket-jquery-ui/autocomplete/ConverterAutoCompletePage?0

Заранее спасибо.


person fancyplants    schedule 15.06.2015    source источник


Ответы (2)


Обновите Wicket до последней версии 6.19.0 и посмотрите, исчезнут ли проблемы. Начиная с версии 6.11.0 было исправлено несколько ошибок, связанных с автозаполнением полей и модальными окнами:

Возможно, они решат ваши проблемы без необходимости взлома.

person Robert Niestroj    schedule 16.06.2015
comment
Привет! Версия расширений калитки по-прежнему вызывает те же проблемы, что и выше в 6.19. Бах. Возможно, мне придется свернуть свой собственный. - person fancyplants; 06.07.2015

Для пользовательского интерфейса Wicket jQuery это предусмотрено дизайном, и это должно обрабатываться пользователем напрямую.

https://groups.google.com/forum/#!searchin/wicket-jquery-ui/autocomplete/wicket-jquery-ui/bwSVY4mlrac/q-dRK1EUr6cJ

<wicket:head>
    <style type="text/css">
        .ui-autocomplete {
            z-index: 9999 !important;
        }
    </style>
</wicket:head>

Если это не решит вашу проблему, не стесняйтесь прикрепить краткое руководство, демонстрирующее проблему на специальном форуме...

С уважением,
Себастьян

person sebfz1    schedule 20.06.2015
comment
Привет, Себастьян, я обновился до 6.19, и это немного лучше (я могу использовать приведенный выше css, чтобы он отображался в диалоговом окне в порядке), но метод onSelected теперь отсутствует, и, похоже, он борется с вводом чего-либо другого чем Струны. Если я попытаюсь использовать его с настраиваемым типом объекта, он просто сохранит toString объекта в базовой модели. (Я пытаюсь создать поле выбора автозаполнения в стиле JIRA) - person fancyplants; 06.07.2015
comment
Вы передали тип конструктору? - person sebfz1; 07.07.2015