2013-04-04 44 views
0

我有一个包含复选框的HTML表单&包含一些文本字段的Lis​​tView。在检查复选框,我希望文本域被禁用&反之亦然。如何在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 ---复选框

回答

0

您的listViewContainer必须在之前通过ajax更新它的标记编号。当你构建它时立即做到这一点!

listViewContainer.setOutputMarkupId(true); 

BTW以下是多余的,因为列表视图中已包含的组件树(至少我希望你加入它的话):

listViewContainer.addOrReplace(listView); 
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); 
     } 
相关问题