我有一个wicket下拉选项,当我选择某些内容时,我想更新表单中的一些组件。使用wicket(1.4)ajax工作正常。但是,它正在更新整个表单,包括dropdownchoice本身。下拉列表中有很多项目(可能是2000),所以从性能的角度来看并不是很好。
这是页面层次结构:
form (Form)
|----packageDDC (DropDownChoice)
|----pptview (RefreshingView)
|----buy (Button)
packageDDC.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
//--snip-- update pricepoints which back up the pptview
target.addComponent(form); //ie the form
}
}
在ajax调试窗口中,我可以看到每次重新发送的所有下拉选项
我想要做的只是通过ajax更新pptview和Button,而不是dropdownchoice的内容。
我尝试将pptview添加到目标,但它抱怨无法通过ajax更新RefreshgViews。 我尝试使用EnclosureContainer包装pptview,但是wicket也不喜欢它(关于setRenderBodyOnly) 所以我尝试使用WebMarkupContainer(称为'pptcontainer')并将pptview设置为其中的一个 - 但现在pptview没有更新。相反,它说(在Ajax调试中):
"ERROR: Wicket.Ajax.Call.processComponent: Component with id [[purchaseButton2f]] was not found while trying to perform markup update. Make sure you called component.setOutputMarkupId(true) on the component whose markup you are trying to update."
"ERROR: Wicket.Ajax.Call.processComponent: Component with id [[pptcontainer2e]] was not found while trying to perform markup update. Make sure you called component.setOutputMarkupId(true) on the component whose markup you are trying to update."
这些对象确实将此设置为true:
buy.setOutputMarkupId(true);
pptcontainer.setOutputMarkupId(true);
pptcontainer.setOutputMarkupPlaceholderTag(true);
因此页面未正确更新。
我做错了什么?
新的层次结构是:
form (Form)
|----packageDDC (DropDownChoice)
|----pptcontainer (WebMarkupContainer)
| |----pptview (RefreshingView)
|----buy (Button)
答案 0 :(得分:4)
我遇到弹出窗口的相同问题,其内容由ajax调用提供。在我的情况下,通过更改html占位符来解决问题" wicket:container"到" div"本文中提出的元素:http://sha.nnoncarey.com/blog/archives/36
在此更改生成后,html具有正确的id,wicket没有问题找到它并用AJAX响应替换内容。