`
sun4love
  • 浏览: 234618 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

zul组件、zhtml组件、native组件的区别

    博客分类:
  • zk
阅读更多

一,所属命名空间不同


zul组件  xmls= http://www.zkoss.org/2005/zul

zhtml组件 xmlns:h=" http://www.w3.org/1999/xhtml "

native组件 xmlns:n=" http://www.zkoss.org/2005/zk/native "

二,组件类不同

zul组件  zul.jar下组件类


zhtml组件 zhtml.jar下组件类

native组件 全部是zk.jar下的类org.zkoss.zk.ui.HtmlNativeComponent

 


三,事件处理EventHandler

 1,zhtml组件 可以触发事件处理函数onSetting

   <h:input  value="测试" type="button" forward="onSetting" xmlns:h=" http://www.w3.org/1999/xhtml"/ >


2, native组件不可以触发事件处理函数onSetting 

    <n:input  value="测试" type="button" forward="onSetting" xmlns:n="native"/>


3,zul组件可以触发事件处理函数onSetting 

    <button label="测试" id="btnSubmit" forward="onSetting"></button>
 

四,受管状态


所谓受管状态,全由个人杜撰,即所在命名空间保存其组件信息,可通过命名空间查找删除组件

1)结论


   1,zul组件  与  zhtml组件  是受所在命名空间管理的
   2,native组件 不受所在命名空间管理


2)结论依据


  zul组件、zhtml组件、native组件 有一个共同祖先 org.zkoss.zk.ui.AbstractComponent类
  在zk5.06版中的AbstractComponent类的setId(543行)方法中有一行代码
  addToIdSpaces(this);(589行),意思是将当前组件添加到id命名空间中,
  例如添加到window,page中,  但在addToIdSpaces方法中有一段有趣的代码

	/** Adds to the ID spaces, if any, when ID is changed.
	 * Caller has to make sure the uniqueness (and not auto id).
	 */
	private static void addToIdSpaces(final Component comp) {
		final String compId = comp.getId();
		if (comp instanceof NonFellow || isAutoId(compId))
			return; //nothing to do

		if (comp instanceof IdSpace)
			((AbstractComponent)comp).bindToIdSpace(comp);

		addFellow(comp, getSpaceOwnerOfParent(comp));
	}

 

    这段有趣的代码 

 

if (comp instanceof NonFellow || isAutoId(compId))
    return; //nothing to do

   意思是排除符合NonFellow接口的组件,排除由zk自动生成id的组件
 然后我查看了zul组件,zhtml组件,native组件,发现native组件HtmlNativeComponent实现了该接口
 如下:

public class HtmlNativeComponent extends AbstractComponent implements DynamicTag, Native {
 //................

}

public interface Native extends NonFellow {

 //................

 } 

 


五,生成静态内容

zul页面代码

<?xml version="1.0" encoding="utf-8"?>
<window
 xmlns:w="client" xmlns:n="native" xmlns="http://www.zkoss.org/2005/zul"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd"
    apply="IndexController">
    <h:input  value="测试" type="button" forward="onSetting" xmlns:h="http://www.w3.org/1999/xhtml"/>
    <n:input  value="测试" type="button" forward="onSetting" xmlns:n="native"/>
    <button mold="os" label="测试"   forward="onSetting"></button>
</window>

 


生成静态内容,与上面代码顺序一样

['zhtml.Widget','oW6Q1',{$onClick:true,prolog:'<input id="oW6Q1" value="测试" type="button"/>'},[]],

['zk.Native','oW6Q2',{prolog:'\n\t<input value="测试" type="button"/>'},[]],

 

['zul.wgt.Button','oW6Q3',{$onClick:true,prolog:'\n\t',label:'测试'},[],'os']]]]]);

从中我们可以看出:

1,从上面json格式的代码可以看出zhtml与native组件仅仅做了简单的处理,直接输出到prolog属性上

2,zul组件与zhtml组件都监听了onClick事件,$onClick:true,从而触发服务器端controller类的事件处理程序


实践:

由上可以知道,native组件无法getFellow得到,所以如果你这么做了,一定获得null,

但如果想获得native组件,有一个方法:

获得native组件附近的受管zhtml组件或zul组件然后通过这些组件的方法获得

1,如果父组件是native组件,getParent方法

2,如果子组件第一个组件是native组件 getFirstChild方法
,

3,如果子组件的第一个组件是native组件getLastChild方法,

4,如果相邻的上一个组件是native组件,getNextSibling方法

5,如果相邻的上一个组件是native组件,getPreviousSibling方法

6,当然你也可以使用链式方法获取native组件

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 





 

分享到:
评论

相关推荐

    zul studio 安装文件

    在本安装文件中,你将找到所有必要的组件来配置和使用ZUL Studio进行ZK应用的开发。 首先,我们来了解一下ZUL Studio的核心特性: 1. **可视化设计**:ZUL Studio提供了一个直观的拖放式界面,允许开发者直接在...

    zk 组件开发指南 部分内容

    在本文中,我们将深入探讨ZK组件开发指南的相关知识点,主要关注展现层的构建、DSP文件的使用以及组件渲染器的工作原理。 首先,展现层是客户端组件的可视化部分,它可以是HTML、JavaScript、MIDLet、XML节点或...

    zul页面和java注解

    整理的比较全面的zul页面注解和java注解,初学zk框架的朋友可以看看,了解注解的功能,便于框架的学习。

    ZK_学习总结 ZK学习的好帮手

    - 创建第一个ZK项目"Hello World"时,通常会通过Eclipse创建一个新的ZK Web项目,然后编写包含简单组件(如Label)的ZUL页面,最后运行并查看结果。 - 分析配置文件,例如web.xml,了解ZK应用如何与Servlet容器...

    zkoss开发手册

    - **实现组件**:实现ZK组件的核心是继承自`zul.wgt.AbstractComponent`类或其子类,并覆盖必要的方法以定义组件的行为。 - **实现组件属性**:组件可以通过定义属性来提供灵活性。这些属性可以在服务器端设置,并...

    ZK 6.5.0 Component Development Essentials

    - **定义组件类**:继承自 `zul.wgt.UICustom` 类或其他 ZK 组件基类,实现必要的方法。 - **实现属性**:根据需求添加组件的属性,如 `String` 类型的名称等。 - **编写客户端代码**:使用 JavaScript 实现组件...

    zui动态生成树的代码,zul对extjs的集成

    根据提供的文件信息,我们可以深入探讨两个主要的知识点:ZUI 动态生成树的代码以及 ZUL 对 ExtJS 的集成。 ### ZUI 动态生成树的代码 #### 概述 ZK 是一个用于构建企业级 Web 应用的强大框架,而 ZUI 是其前端...

    ZK_学习教程

    它通过一种称为ZUL(ZK User Interface Language)的标记语言,结合服务器端的组件模型,实现了前后端的分离,简化了开发流程。 1.2 ZK特点 - **事件驱动**:ZK在服务器端处理用户交互,减轻了客户端的压力。 - **...

    zk3.5源代码这个不用说了吧

    4. **ZUL语言**:ZK提供了一种标记语言ZUL(ZK User Interface Language),用于定义用户界面布局和组件。ZUL文件类似于XML,用于描述组件结构和行为。 5. **Ajax技术**:ZK利用Ajax实现页面的部分刷新,提升用户...

    zk的主界面的树型的源代码

    在ZK中,树组件是通过XML(ZUL文件)和Java类(如Composer或Listener)共同定义的。ZUL文件负责布局和组件定义,而Java类则处理业务逻辑和事件处理。 描述中提到,为了在MyEclipse中重现ZK的主界面,你需要创建一个...

    ZK 开发手顺

    在Eclipse中创建一个新的ZUL文件(ZK的用户界面文件),并编写简单的Hello World组件,例如: ```xml , ZK!" /&gt; ``` 运行这个项目,你将在浏览器中看到"Hello, ZK!"的显示。 2.4 **例子中的配置分析** ZUL文件...

    Publishing.ZK.Developers.Guide pdf 书中代码

    5. **ZUL和SML页面**:ZK使用ZUL(ZK User Interface Language)和SML(Screen Markup Language)作为其标记语言。通过分析代码,你可以理解这两种语言的语法和用法,如何定义布局和组件属性。 6. **Composer和...

    ZK框架:Ajax开发实战

    4. **ZUL文件**:ZK使用ZUL(ZK User Interface Language)作为界面描述语言,类似于XML,用于定义组件结构和行为。ZUL文件中可以嵌入EL表达式,方便地处理数据绑定和事件处理。 5. **Composer**:Composer是ZK中的...

    ajax框架 zk开发手册

    - **创建ZUL文件**:使用ZUL文件定义用户界面,ZUL文件包含了各种组件以及它们的属性和事件处理。 - **编写Java控制器**:创建Java类作为控制器,处理ZUL文件中的事件,实现业务逻辑。 - **配置和部署**:配置ZK...

    zk入门.web框架

    1. **Window**:用于创建独立的弹出窗口,可包含多个ZUL组件。 2. **Grid**:用于展示二维数据,类似表格,支持排序、分页等功能。 3. **Listbox**:展示列表数据,支持多选和单选。 4. **Tree**:用于展现层级结构...

    ZK开发手册

    《ZK开发手册》是专为Java开发者设计的一份详尽指南,主要涵盖了ZK框架的各个方面,旨在帮助用户深入理解和高效使用这个强大的组件。ZK是一个基于组件的、事件驱动的用户界面(UI)框架,它使得在Web环境中创建交互...

    ZKoss 文档

    4. **ZUL脚本语言**:ZK 自定义的 ZUML (ZK User Interface Markup Language) 是一种声明式语言,用于描述用户界面布局和组件属性,简化了界面设计。 5. **数据绑定**:ZK 支持双向数据绑定,可以轻松地将组件与...

    zk.zip_zk

    总之,ZK 5是一个强大且易用的Web开发框架,它的事件驱动模型、丰富的组件库、灵活的布局管理以及ZUL脚本语言,都极大地提升了开发效率和应用质量。对于希望进入或提升在RIA领域的开发者来说,理解和掌握ZK 5的知识...

Global site tag (gtag.js) - Google Analytics