Wicket ListMultipleChoice и ajax - PullRequest
       0

Wicket ListMultipleChoice и ajax

1 голос
/ 29 июля 2011

У меня вопрос по поводу ListMultipleChoice, есть ли возможность получить выбранные элементы перед отправкой, например, по ajax-ссылке, потому что я бы не обновлял свою страницу каждый раз.

Спасибо!

    // Liste des partenaires de l'offre.
final ListMultipleChoice partenairesSelec =
    new ListMultipleChoice("partenairesSelec", new Model((Serializable) partenairesSelected), new PropertyModel(
        offre,
        "partenaires"), renderer);


// Liste des domaines.
final DropDownChoice makes = new DropDownChoice("domaines", new PropertyModel(this, "selectedMake"), makeChoices) {
  @Override
  protected CharSequence getDefaultChoice(Object selected) {
    return new ArrayList<String>(modelsMap.keySet()).get(0);
  }
};

// Liste des partenaires disponibles.
final ListMultipleChoice partenairesChoice =
    new ListMultipleChoice("partenaires", new Model((Serializable) partenairesSelection), modelChoices, renderer);


// Action associé au changement du domaine.
makes.add(new AjaxFormComponentUpdatingBehavior("onchange") {
  @Override
  protected void onUpdate(AjaxRequestTarget target) {
    target.addComponent(partenairesChoice);
  }
});

// Bouton ajouter.
Button ajout = new Button("ajout") {
  @Override
  public void onSubmit() {
    if (partenairesSelection.size() != 0) {
      for (Partenaire p : partenairesSelection) {
        if (!partenairesSelected.contains(p)) {
          offre.getPartenaires().add(p);
          modelsMap.get(selectedMake).remove(p);
        }
      }
      offre.setPartenaires(sortPartenaireList(offre.getPartenaires()));
    }
  }
};

// Bouton supprimer.
Button suppr = new Button("suppr") {
  @Override
  public void onSubmit() {
    List<Partenaire> tmp = new ArrayList<Partenaire>();
    if (partenairesSelected.size() != 0) {
      for (Partenaire p : partenairesSelected) {
        if (!partenairesSelection.contains(p)) {
          Long id = p.getPartnerDomainId();
          tmp.add(p);
          for (String key : modelsMap.keySet()) {
            if (modelsMap.get(key).size() > 0 && modelsMap.get(key).get(0).getPartnerDomainId() == id) {
              modelsMap.get(key).add(p);
            }
          }
        }
      }
      for (Partenaire p : tmp) {
        offre.getPartenaires().remove(p);
      }
      offre.setPartenaires(sortPartenaireList(offre.getPartenaires()));
    }
  }
};

Ответы [ 2 ]

1 голос
/ 18 декабря 2013

AjaxFormChoiceComponentUpdatingBehavior не работает для ListMultipleChoice!

Я также искал хорошее рабочее решение, и через некоторое время я нашел действительно хороший учебник, в котором точно описана ситуация с двумя элементами ListMultipleChoice и кнопками добавления / удаления для обмена содержимым между двумя множественными полями выбора:
http://blog.xebia.com/2008/03/25/wicket-and-list-choice-transfers/

Они используют AjaxButtons для этого без отправки формы.

1 голос
/ 29 июля 2011

AjaxFormChoiceComponentUpdatingBehavior - класс, предназначенный именно для этого. Присоедините его к своему компоненту, и вы будете получать обновления AJAX везде, где изменяется выбор.

...