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