如何启用/禁用apache wicket中复选框值更改的文本字段?

时间:2013-04-04 07:11:29

标签: java wicket

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

我正在使用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

lat,lon,radius --- textfields

unmanagedChk ---复选框

2 个答案:

答案 0 :(得分:0)

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

listViewContainer.setOutputMarkupId(true);

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

listViewContainer.addOrReplace(listView);

答案 1 :(得分:0)

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

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