Wicket 7 - текстовое поле автозаполнения - иметь метод onSelect - PullRequest
0 голосов
/ 01 октября 2018

Мы хотели бы реализовать поле AutoCompleteTextField, как только пользователь выберет поле из результата автозаполнения, тогда система автоматически заполнит другое текстовое поле, я использовал компонент AjaxFormComponentUpdatingBehavior (blur), однако это будет действовать при каждом вводе текстаиз поля AutoCompleteTextField, но если я перехожу на AjaxFormComponentUpdatingBehavior (change), он не работает.

Ниже приведен пример кода:

    AutoCompleteTextField<String> field_postcode = new AutoCompleteTextField<String>("field_postcode",
            new PropertyModel<String>(getModelObject(), "wAdditionalInfo.postal"), autoCompleteRenderer) {
        private static final long serialVersionUID = 1L;

        @Override
        protected Iterator<String> getChoices(String input) {
            if (Strings.isEmpty(input)) {
                List<String> emptyList = Collections.emptyList();
                return emptyList.iterator();
            }

            List<String> choices = new ArrayList<String>();

            List<Postcode> postcodeList = getProfileManager().findAllPostcodeByPostcode(input);

            for (Postcode p : postcodeList) {
                String postcode = p.getPostcode();

                if (postcode.startsWith(input)) {
                    choices.add(p.getPostcode());
                    if (choices.size() == 10) {
                        break;
                    }
                }
            }
            return choices.iterator();
        }

    };
    field_postcode.setRequired(true);


    field_postcode.add(new AjaxFormComponentUpdatingBehavior("blur"){
          private static final long serialVersionUID=-1107858522700306810L;


          @Override protected void onUpdate( AjaxRequestTarget target){

              Postcode postcode = getProfileManager().findPostcodeByPostcode(field_postcode.getInput());
                if (postcode != null) {
                    City city = postcode.getCity();
                    State state = city.getState();
                    field_city.setModelObject(city.getCity());
                    ddl_state.setModelObject(state);
                    if (isDisplayTip) {

                    //isDisplayTip true mean is from widrawal webform

                        isReadonly = true;
                    } else {
                        field_city.setEnabled(false);
                    }
                    ddl_state.setEnabled(false);

                } else {
                    if (isDisplayTip) {
                        isReadonly = false;
                    } else {
                        field_city.setEnabled(true);
                    }
                    ddl_state.setEnabled(true);
                }
                target.add(field_city, ddl_state);

          }
        }
    );

Есть ли API из калитки для достижения этого?Нам нужно что-то, когда пользователь выбирает опцию из Автозаполнение, тогда это только метод onUpdate AjaxFormComponentUpdatingBehavior

1 Ответ

0 голосов
/ 01 октября 2018

Согласно https://github.com/apache/wicket/blob/cbc237159c4c6632b4f7db893c28ab39d1b40ed4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js#L620 он должен вызвать событие change в HTMLInputElement и, таким образом, уведомить вас на стороне сервера.

Используйте отладчик браузера, чтобы определить, является ли https://github.com/apache/wicket/blob/cbc237159c4c6632b4f7db893c28ab39d1b40ed4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js#L453выполняется и приводит ли это к вызову Ajax со значением в параметрах.

...