组件通过ID空间被分组。page本身即为一个ID空间。window组件是另外一个ID空间。假定你有一个名为的P的page,此page有一个名为A的窗口,A窗口有一个子窗口B。那么,若你想获取窗口B的一个子组件,例如C,可以按如下方式处理。
comp.getDesktop().getPage("P").getFellow("A").getFellow("B").getFellow("C");
getFellow
方法用于获取如同一空间内的任何伙伴。ID空间的概念请参考基础一章中ID空间一节。
就像文件系统中的路径,组件路径为沿着ID空间排列的组件ID(a component path is a catenation of IDs of components along ID spaces)。在上面的例子中,路径为"/A/B/C"。换言之,组件路径的根为当前page。若你想标识另一个page,必须使用"//"。在上面的例子中,路径也可以被表示为 "//P/A/B/C"。
org.zkoss.zk.ui.Path
类,就像java.io.File
,被用来简化操纵组件路径。因此,下列的语句的等价于上面的例子。
Path.getComponent("/A/B/C"); //assume the current page is P Path.getComponent("//P/A/B/C");
除了静态方法,你可以初始化一个Path实例。
Path parent = new Path("//P/A"); new Path(parent, "B/C").getComponent();
提示: Path.getComponent("//xyz") 总会返回null,因为//之后的标识为页面ID。而页面不是组件。