我有一个包含复选框的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
lat,lon,radius --- textfields
unmanagedChk ---复选框
答案 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);
}