ZK禁用Div,Window,Layout Component?

时间:2013-05-16 08:58:40

标签: zk

我在我的项目中使用 ZK Framework 我在div或Window组件中有很多其他组件,任何人都可以告诉我如何禁用Div或{{1在某些条件下组件。我检查过这些组件没有任何Window属性。

我们可以disable disableDiv的任何其他方式,否则我必须禁用WindowDiv或{{1}内的每个组件}}

3 个答案:

答案 0 :(得分:2)

我认为没有简单的方法,我会尝试这样的东西(在google上发现这个,但我记得在我上一个项目中做了类似的事情)

public static void disableComponents( AbstractComponent pComponent ) {

  for( Object o : pComponent.getChildren() ) {

     AbstractComponent ac = ( AbstractComponent ) o;

     try {
        Method m = ac.getClass().getMethod( "setDisabled", Boolean.TYPE );
        m.invoke( ac, true );
     } catch( Exception e ) {
     }

     List children = ac.getChildren();
     if( children != null ) {
        disableComponents( ac );
     }
  }

}

答案 1 :(得分:2)

这是一种非常简单的方法来禁用所有实现的组件 Disable界面。

@Wire("disable")
private List<Disable> allToDisable;

private disableAll(List<Disable> list){
   for(Disable d : list){
       d.setDisabled(true);
   }
}

您可以修改@Wire的路径以满足您的需求,
使用Selectors或任何其他方法的方法
采用zk选择器路径。让它以结尾 "disable",所以它应该选择每个组件 实现接口。

答案 2 :(得分:1)

我们可以改进Gatekeeper(5月16日和9月22日13:22)解决方案添加条件&#34; if&#34;。   if(ac instanceof Disable){--- code - }

public static void disableComponents( AbstractComponent pComponent ) {
    for( Object o : pComponent.getChildren() ) {
        AbstractComponent ac = ( AbstractComponent ) o;
        try {
            if (ac instanceof Disable) {
                Method m = ac.getClass().getMethod("setDisabled", Boolean.TYPE);
                m.invoke(ac, true);
            }
        } catch( Exception e ) {
            e.printStackTrace();
        }

        List children = ac.getChildren();
        if( children != null ) {
            disableComponents( ac );
        }
    }
}