2014-01-21 93 views
1

目前我有一個面板,其中說我有10個文本字段和10個下拉菜單。我想要禁用面板中除1個文本字段以外的所有組件。目前我正在做的是對面板中的所有組件調用setenabled false,並且只對1個組件啓用true。而不是這樣做,我寧願禁用整個面板並只在該面板中啓用1個特定組件。但是這不起作用。在檢票口可以嗎?誰能幫忙?Wicket:啓用面板組件時顯式禁用整個面板

回答

0

看看這個接口:IVisitor

visitChildren(new IVisitor<Component, Object>() { 
     @Override 
     public void component(Component object, IVisit<Object> visit) { 
      object.setEnabled(false); 
     } 
    }); 

這裏visitChildren()MarkupContainer,你的Panel是一個函數。

或者創建一個功能:

public static void setEnabled(boolean enabled, Component... components) { 
    for (Component component : components) { 
     component.setEnabled(enabled); 
    } 
} 

,並使用這樣的:

setEnabled(false, textfield1, textfield2, dropdown1, dropdown2); 
0

禁用面板和覆蓋特殊成分的IsEnabled()函數返回true。 /當使用鏈接時,然後覆蓋保護布爾isLinkEnabled()和公共布爾canCallListenerInterface(方法方法)以及!當你有它,嘗試它,如果你得到ListenerInvocationNotAllowedException然後檢查是什麼原因造成它。它很好地寫在日誌中。您也可能會遇到其他異常情況,請嘗試調試它們,但我相信這一切都是可以解決的。 我的答案是基於Wicket 1.6(達到概念證明),但可能是1.5的解決方案。

我的特殊組件是DownloadLink。這裏的例子:

DownloadLink documentLink = new DownloadLink("documentLink", getFileModel(question), new PropertyModel<String>(getDefaultModelObject(), "answer.documentName")){ 
     @Override 
     public boolean isEnabled() { 
      return true; 
     } 

     @Override 
     protected boolean isLinkEnabled() { 
      return true; 
     } 

     @Override 
     public boolean canCallListenerInterface(Method method) { 
      return true; 
     } 
    }; 
+0

_Disable面板和覆蓋特殊成分的IsEnabled()函數返回true_不爲我一個小組在工作了一個複選框,我檢票口6.18和6.24 –

+0

你使用哪種CheckBox的實施? (因爲複選框是一個界面..) – BlondCode

+0

複選框是一個類:https://ci.apache.org/projects/wicket/apidocs/6.x/org/apache/wicket/markup/html/form/CheckBox.html –

相關問題