【问题标题】:Wicket ListMultipleChoice and ajaxWicket ListMultipleChoice 和 ajax
【发布时间】:2011-07-29 08:30:50
【问题描述】:

我有一个关于 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()));
    }
  }
};

【问题讨论】:

    标签: wicket


    【解决方案1】:

    AjaxFormChoiceComponentUpdatingBehavior 是专门为此而设计的类。将其附加到您的组件,无论选择发生什么变化,您都会获得 AJAX 更新。

    【讨论】:

    • 谢谢。我们可以添加一个 ajax 链接来获取选定的选项吗?
    • 我想我不明白你想要什么。动态显示链接?
    • 不,我有 2 个 ListMultipleChoice 和 2 个按钮(添加、删除),所以在从第一个列表中选择元素后,我将它们添加到另一个列表中(我使用提交按钮解决了问题,但我需要 ajax 链接不重新加载页面)
    • 该行为会更新您的列表选择的底层模型,因此当您点击链接时,onClick() 方法应该会看到更新后的模型。
    • 是的,但是我该怎么做,问题是模型(这是选定的列表)不能仅在提交时更新,这是我的问题,请问您有什么解决方案吗?我会放一些我的代码来看看它
    【解决方案2】:

    AjaxFormChoiceComponentUpdatingBehavior 对 ListMultipleChoice 不起作用

    我还寻找了一个很好的工作解决方案,过了一段时间我发现了一个非常好的教程,它正好面临两个 ListMultipleChoice 元素和添加/删除按钮以在两个多选框之间交换内容的情况:
    http://blog.xebia.com/2008/03/25/wicket-and-list-choice-transfers/

    他们使用 AjaxButtons 来执行此操作而无需提交表单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      相关资源
      最近更新 更多