Wicket CheckBox 更改其他组件的可见性

Wicket CheckBox change visibility of other component

我有一个 Wicket 7 CheckBox 和一个隐藏的 DateTextField。 当我单击 CheckBox 时,我希望 DateTextField 出现,反之亦然。 为此,我在 WebMarkUpContainer 中添加了 DateTextField。 如果可能的话,我不想使用 Ajax。 问题是 WebMarkUpContainer 总是隐藏的。 一般来说我的代码如下:

class ResultsPanel extends Panel{

private static final class ResultsPage {

final DateTextField startDate = new DateTextField("startDate",  new DateTextFieldConfig().withLanguage("el");

final CheckBox checkBox = new CheckBox("checkBox");

final WebMarkupContainer wmc = new WebMarkupContainer("wmc");

   // bla bla bla

public Results(String id, CompoundPropertyModel propertyModel) {

            super(id, propertyModel);            
            add(checkBox);  
            wmc.setOutputMarkupPlaceholderTag(true);                     
            wmc.add(startDate);
            add(wmc.setVisible(false));  
            }

public ResultsPanel(String id){
  super(id);   
  add(new ResultsPage("resultsPage", new CompoundPropertyModel()));
}

}

如果您在单击复选框时不需要触发任何服务器端代码,您可以考虑对 hide/show DateTextField 使用一些简单的 JavaScript 代码。可以使用 JavaScriptHeaderItem 将此代码附加到复选框。您可以在用户指南中找到更多详细信息。

更新

在 Wicket 7.x 你可以试试

    new CheckBox("id", model) { 
    protected boolean wantOnSelectionChangedNotifications() {
     return true;
 } 
    protected void onSelectionChanged(Boolean newSelection) {
     // do something, page will be rerendered; 
} };