0

我有一个 html 表单,其中包含一个复选框和一个包含一些文本字段的 ListView。在选中复选框时,我希望禁用文本字段,反之亦然。

我正在使用带有 AjaxFormComponentUpdatingBehavior 的复选框。但它没有将文本字段设置为启用/禁用。以下是代码片段 -

Checkbox.add(new AjaxFormComponentUpdatingBehavior("onchange") {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            listView.setEnabled(!Checkbox.getModelObject());
            listViewContainer.addOrReplace(listView);
            listViewContainer.setOutputMarkupId(true);
            target.addComponent(listViewContainer);
        }
    });

HTML是 -

<form wicket:id="geoForm">
      Checkbox: <input type="checkbox" wicket:id="unmanagedChk" />
        <div id="listViewContainer" wicket:id="listViewContainerId">
            <div wicket:id="customGeoForChannel">         
                <div>
                    Latitude(decimal):
                    <input type="text" wicket:id="lat" maxlength="18" />
                </div>
                <div>
                    Longitude(decimal):
                    <input type="text" wicket:id="lon" maxlength="19" />
                </div>
                <div>
                    Radius(miles):
                    <input type="text" wicket:id="radius" maxlength="3" />
                </div>
            </div>
        </div>
 </form>

geoForm --- 表格

customGeoForChannel --- ListView

纬度、经度、半径 --- 文本字段

unmanagedChk --- 复选框

4

2 回答 2

0

我将 listviewcontainer 添加到表单并将表单添加到目标,如下所示。这解决了这个问题。

protected void onUpdate(AjaxRequestTarget target) {
            listView.setEnabled(!Checkbox.getModelObject());
            listViewContainer.addOrReplace(listView);
            listViewContainer.setOutputMarkupId(true);
            target.addComponent(listViewContainer);
            form.add(listViewContainer);
            target.addComponent(form);
        }
于 2013-04-05T04:45:50.970 回答
0

您的 listViewContainer 必须在通过 ajax 更新它之前写出它的标记 ID 。构建时立即执行此操作!

listViewContainer.setOutputMarkupId(true);

顺便说一句,以下是多余的,因为 listView 已经包含在组件树中(至少我希望你已经添加了它):

listViewContainer.addOrReplace(listView);
于 2013-04-04T09:26:48.027 回答