Wicket调色板与dropdownchoice

时间:2011-07-25 16:19:56

标签: wicket

我创建了一个包含值的调色板,我创建了一个带有AjaxFormComponentUpdatingBehavior的DropDownChoice ddcdomaines来更新选择列表,但我不知道该怎么做,你能帮助我吗?

这是我的代码:

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 个答案:

答案 0 :(得分:3)

以下是使用AjaxFormComponentUpdatingBehavior的DropDownChoice的一个很好的例子:

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

单击“源代码”链接以查看源代码。如果您需要更多信息,则需要在问题中提供更多详细信息。

更新:根据JavaDoc,有一种使用Ajax更新Palettes的特定方法:

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

确保在执行任何其他操作之前遵循这些说明。

在您的代码中,您试图删除一个Palette并放入另一个Palette。虽然这可能在长期内起作用,但它并不是非常Wicket-y。可悲的是,Palette没有公开的方法来改变选择。但是,如果您保留对choicesModel的引用,则可以修改该列表,并且Palette应该在重新呈现时看到更改。像这样:

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);

小心跟踪所选择的选项和可能的选择。我不确定如果这些不匹配会发生什么。希望有所帮助!