wicket:如何使用ajax更新表单组件,而不是整个表单

时间:2014-02-20 10:59:56

标签: ajax wicket

我有一个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)

1 个答案:

答案 0 :(得分:4)

我遇到弹出窗口的相同问题,其内容由ajax调用提供。在我的情况下,通过更改html占位符来解决问题" wicket:container"到" div"本文中提出的元素:http://sha.nnoncarey.com/blog/archives/36

在此更改生成后,html具有正确的id,wicket没有问题找到它并用AJAX响应替换内容。