如何在apache wicket中启用/禁用复选框值更改的文本框?
问题描述:
我有一个包含复选框的HTML表单&包含一些文本字段的ListView。在检查复选框,我希望文本域被禁用&反之亦然。如何在apache wicket中启用/禁用复选框值更改的文本框?
我正在使用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 ---复选框
答
您的listViewContainer必须在之前通过ajax更新它的标记编号。当你构建它时立即做到这一点!
listViewContainer.setOutputMarkupId(true);
BTW以下是多余的,因为列表视图中已包含的组件树(至少我希望你加入它的话):
listViewContainer.addOrReplace(listView);
答
我加入了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);
}