Калитка палитра с выпадающим выбором - PullRequest
1 голос
/ 25 июля 2011

Я создал палитру, которая содержит значения, и я создал DropDownChoice ddcdomaines с AjaxFormComponentUpdatingBehavior для обновления списка выбора, но я не знаю, как это сделать, вы можете мне помочь?

Вот мой код:

List<PartnerDomainDTO> domaines = partenaireHelper.allDomains();
    ChoiceRenderer choiceRenderer = new ChoiceRenderer("label", "sid");

    final Palette palette =
        new Palette("partenaires", new PropertyModel(offre, "partenaires"), new Model(
            (Serializable) partenairesPossibles), renderer, 10, false) {
          private static final long serialVersionUID = 1178320215146881229L;

          boolean first = true;

          @Override
          public Iterator getSelectedChoices() {
            if (first) {
              first = false;
              return partenairesExistants.iterator();
            }
            return super.getSelectedChoices();
          }
        };
    palette.setOutputMarkupId(true);
    palette.setOutputMarkupPlaceholderTag(true);

    DropDownChoice ddcdomaines = new DropDownChoice("domaines", new Model(domaines.get(0)), domaines, choiceRenderer);

    ddcdomaines.add(new AjaxFormComponentUpdatingBehavior("onchange") {
      @Override
      protected void onUpdate(AjaxRequestTarget target) {
        remove(palette);
        Palette palette1 =
            new Palette(
                "partenaires",
                new PropertyModel(offre, "partenaires"),
                new Model(new ArrayList<Partenaire>()),
                renderer,
                10,
                false);
        palette1.setOutputMarkupId(true);
        palette1.setOutputMarkupPlaceholderTag(true);
        add(palette1);
        target.addComponent(palette);
        target.addComponent(palette1);
      }
    });
    add(palette);
    add(ddcdomaines);
  }

1 Ответ

3 голосов
/ 25 июля 2011

Вот отличный пример DropDownChoice с AjaxFormComponentUpdatingBehavior:

http://wicketstuff.org/wicket/ajax/choice

Нажмите ссылку на исходный код, чтобы увидеть источник.Если вам нужно больше информации, чем нужно, чтобы предоставить более подробную информацию в вашем вопросе.

Обновление : Согласно JavaDoc, существует особый способ обновления палитр с использованием Ajax:

http://wicket.apache.org/apidocs/1.4/org/apache/wicket/extensions/markup/html/form/palette/Palette.html

Обязательно следуйте этим инструкциям, прежде чем делать что-либо еще.

В своем коде вы пытаетесь удалить одну палитру и вставить другую палитру.Хотя это может сработать в долгосрочной перспективе, это не очень хорошо.К сожалению, Палитра не имеет публичного метода для изменения выбора.Однако, если вы сохраните ссылку на свой choicesModel, вы можете изменить этот список, и палитра должна увидеть изменения при повторном рендеринге.Примерно так:

final Model<List<String>> choicesModel = new Model<List<String>>(partenairesPossibles)

final Palette palette = new Palette("partenaires", new PropertyModel(offre, "partenaires"), choicesModel, renderer, 10, false) {...};

А затем в вашем Ajax onUpdate

choicesModel.setObject(/* Insert your other list */);
target.addComponent(palette);

Будьте внимательны, отслеживая выбранные варианты и возможные варианты.Я не уверен, что произойдет, если они не совпадают.Надеюсь, это поможет!

...