带下拉选项的Wicket调色板

带下拉选项的Wicket调色板,wicket,Wicket,我创建了一个包含值的调色板,我创建了一个带有AjaxFormComponentUpdateBehavior的DropDownChoice ddcdomaines来更新选项列表,但我不知道怎么做,你能帮我吗 这是我的代码: List<PartnerDomainDTO> domaines = partenaireHelper.allDomains(); ChoiceRenderer choiceRenderer = new ChoiceRenderer("label", "sid

我创建了一个包含值的调色板,我创建了一个带有AjaxFormComponentUpdateBehavior的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);
  }
List domaines=partenairehelp.allDomains();
ChoiceRender ChoiceRender=新的ChoiceRender(“标签”、“sid”);
最终调色板=
新调色板(“partenaires”,新属性模型(offre,“partenaires”),新模型(
(可序列化)partenaRespossibles),渲染器,10,false){
私有静态最终长serialVersionUID=117832015146881229L;
布尔值优先=真;
@凌驾
公共迭代器getSelectedChoices(){
如果(第一){
第一个=假;
返回partenairexistants.iterator();
}
返回super.getSelectedChoices();
}
};
setOutputMarkupId(true);
setOutputMarkupPlaceholderTag(真);
DropDownChoice ddcdomaines=新的DropDownChoice(“域”,新模型(domaines.get(0)),域,ChoiceRender);
添加(新的AjaxFormComponentUpdateBehavior(“onchange”){
@凌驾
受保护的void onUpdate(AjaxRequestTarget目标){
移除(调色板);
调色板调色板1=
新调色板(
“合伙人”,
新地产模型(主管,“合伙人”),
新模型(新ArrayList()),
渲染器,
10,
假);
palette1.setOutputMarkupId(真);
选项板1.setOutputMarkupPlaceholderTag(真);
添加(选项板1);
target.addComponent(调色板);
target.addComponent(palette1);
}
});
添加(调色板);
添加(DDC域);
}

这是一个使用AjaxFormComponentUpdateingBehavior的DropDownChoice的绝佳示例:

单击源代码链接以查看源代码。如果你需要更多的信息,你需要在你的问题中提供更多的细节

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

在做任何其他事情之前,请确保遵循这些说明

在代码中,您试图删除一个调色板,然后放入另一个调色板。虽然从长远来看,这可能会奏效,但这并不是很明智。遗憾的是,Palette没有一个公共方法来更改选项。但是,如果保留对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) {...};

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

谢谢,是的,我试着使用(dropdownchoice和palette)像示例那样做,但是我没有得到我想要的结果,我甚至试着做一个简单的动作,比如setVisible(true或false),所以我可以隐藏palette,但是当setVisible为true时,什么都没有,它仍然被隐藏!你知道吗?你有没有在调色板上调用
setOutputMarkupPlaceholderTag(true)
?使用Ajax调用隐藏并再次显示的每个组件都需要它。@Mohamed可以通过显示一些代码来编辑您的原始帖子。大概有18.3亿件事情可能是错误的:)@jbrookover谢谢,我认为隐藏组件只需要setOutputMarkupId。现在,当我添加setOutputMarkupPlaceholderTag时,它就可以工作了,我将把我的代码放在上面,以显示我的代码和我要做的事情:)@Mohamed希望更新能有所帮助。我根本没有使用调色板——它们看起来很受限制。谷歌搜索改变名单会出现各种各样的问题。
choicesModel.setObject(/* Insert your other list */);
target.addComponent(palette);