当前位置:编程学习 > JAVA >>

一起玩zk

这段时间要学习zk,欢迎大家踊跃参加,积极报名,加入到真正玩zk的行列。找了一本资料,zk开发向导。myeclipse搭建起来了zk的开发环境,一切准备就绪。从2011年10月8号开始玩zk……
--------------------编程问答-------------------- 沙发坐坐 --------------------编程问答-------------------- 写了自己的第一个程序:playzk。代码如下:
<window title="playzk" border="normal" >
playZk
</window>
非常简单!运行效果是这样的:
贴不上图片。
看了下html源文件,因为之前因为公司需要,研究了一段时间的xsl。感觉zk就是一个非常复杂功能特别齐全的xsl文件,通过zk将一个个的xml文件转换成html文件。我们写的一个个window就相当于xml文件。 --------------------编程问答-------------------- 完成了自己的第二个程序,还是playZk。让页面互动起来,添加一个点击事件:
<window title="playzk" border="normal" >
     <button label="palyzk" onClick="alert("playZk")"></button>
</window>
button上面的值要写label,刚开始的时候我写成了value。再就是onClick事件直接alert,看起来像是js了。看了看书后面的解释是,zk支持大部分的脚本,但是他们要运行的服务器上,记得js是运行的客户端浏览器的。这里不太明白,先放放看看后面有没有更好的解释。
onClick后面的事件也可以用messagebox.show来代替:Messagebox.show("playZk")。
"代替了“”,书上说这样符合xml规范。想想也是,xml中都是一些节点标签,猛的再<>外面加一个“”确是不怎么舒服,个人感觉看着别扭的地方就是容易出问题的地方,暂且这么解释吧,哪个牛人给我仔细讲讲不胜感激。
不信邪,改成了这样:
onClick='alert("paleyzk")'和onClick='Messagebox.show("hello")'
也可以弹出理想的对话框。这是怎么回事呢?看看html源文件里面的脚本:
<script type="text/javascript" src="/zkdemo/zkau/web/e0aaa743/js/zk.wpd" charset="UTF-8">
</script>
<script type="text/javascript" src="/zkdemo/zkau/web/e0aaa743/js/zul.lang.wpd" charset="UTF-8">
</script>
看不太明白。zk.wpd和zul.lang.wpd是干什么用的呢? --------------------编程问答-------------------- 第三个程序,代码如下:
<window title="playzk" border="normal" >
<button label="palyzk" onClick="sayhello()"></button>
<zscript>
int count=0;
void sayhello(){

alert("palyZk"+count);
count++;
}

</zscript>
<button label="hello" onClick="javascript:alert("123")"></button>
</window>
主要是学习了zk的脚本。感觉可以仿照js啊,不同的是要写明函数返回的类型。而不是function。另外在最后面的一个button里面onClick="javascript:alert("123")"这里的javascript:是用来给事件处理器指定脚本为javascript。另外还可以把zs文件放到一个特定的文件中:
sayhello.zs代码如下:
int count=0;
void sayhello(){
alert("sayhello"+ ++count);
}
playZk.zul代码如下:
<window title="playzk" border="normal" >
<button label="palyzk" onClick="sayhello()"></button>
<zscript src="sayhello.zs">

</zscript>
<button label="hello" onClick="javascript:alert("123")"></button>
</window>
zscript里面的src属性"sayhello.zs"不要忘了.zs刚开始我就忘了。我在想javascript后面写的稍微长一点,可以定义一个变量,然后alert。
<button label="hello" onClick="javascript:var count=0;alert(count);"></button>
可以实现理想的功能。 --------------------编程问答-------------------- 表示没用过 --------------------编程问答-------------------- 神马是zk??偶只知道AK.. --------------------编程问答-------------------- 下面是attribute元素和el表达式了:
<button label="palyzk">
<attribute name="onClick">alert("hello")</attribute>
</button>

<button>
        <attribute name="label" trim="true">
The leading and trailing whitespaces will be omitted.
</attribute>
</button>
就是把button的一个属性用attribute放到外边来了,使页面更有可读性了。在第二个button里面有一个trim属性,设置true和false在ie中效果一样,在别的地方trim是清楚字符串前面和末尾的空格,zk中说是省略属性值开头和末尾的值。没看出变化,哪个大哥帮我说一下呢?
越来越感觉zk是一个xsl了,无非是节点和属性复杂点罢了。
el表达式需要另外好好的学习下,现在就记住了3个符号$/./[]


到了zk的id属性了,感觉这是组件一个非常重要的属性。我们希望操作这个组件,这个组件一系列的属性和方法,但是怎么操作呢?给他一个id属性,那么以后出现这个id就代表这个组件了,可以通过id来对组件进行各种操作了。
<window title="playzk" border="normal" >
Do you like ZK?<label id="play"></label>
<separator bar="true"></separator>
<button label="Yes" onClick="play.value=self.label"></button>
<button label="No" onClick="play.value=self.label"></button>
</window>
这里给label一个id,然后在单击的时候需要改变他的value,于是直接play.value就可以了。separator里面的bar属性可以决定是不是出现分割线,假如设置一个颜色呢?试了下发现会报错,原因?zk可以说是一个非常成熟的xsl了,因为它里面并没有对color进行解析,因此xml中出现color属性的时候他不能找到相应的解析语句,找不到就报错了。我想通过五颜六色的分割线使页面变得美观一些的愿望算是告破了。再就是self,他代表当前的组件就是button了。感觉label是button的一个属性是不是有点别扭啊?上次公司写的xsl对于基本组件也有label属性,不用别扭,就是zk看到button然后找里面设置的label属性,因为设置了label属性所以顺利的找到并解析了。
<textbox id="play" value="ABC"></textbox>
<label value="${play.value}"></label>
这个例子看了下el表达式,textbox设置值得时候用的是value。是不是输入类型的组件都是value属性呢?下面的label里面设置value值得时候用的el表达式id为paly的value属性的值($)取出来,给label的value

下面是if和unless用来控制是否创建组件:
<label value="Votye1" if="${param.vote}"></label>
<label value="dsds" unless="${param.vote}"></label>
这里面有一个el表达式${param.vote},param是一个隐式变量。返回的是请求参数的值返回的是请求参数里面vote的值,因此当浏览器地址栏http://localhost:8080/zkdemo/playzk.zul?vote=false的时候,第一个label不会显示。${param}返回一个值。${paramvalues}表示返回一组值。

forEach属性,注意forEach里面的大小写,刚开始写成了foreach
<zscript>
String[] contents=new String[]{"Monday","Tuesday","Wednesday"};
</zscript>
<listbox>
<listitem label="${each}" forEach="${contents}"></listitem>
</listbox>
${each}取出某一范围名为each的变量,这里没有指定范围便依次查找page、session、request、application。后面的forEach应该是创建名为each的几个变量,${contents}取出contents等价于forEach="Monday,Tuesday,Wednesday",自己认为是创建了类似于<listitem id="each" label="Monday"/>这样的3个listitem,然后会得到理想的效果。
还可以通过forEachBegin和forEachEnd来控制迭代(iteration)。



--------------------编程问答-------------------- zk的架构。zk被称为事件驱动编程模型。zk加载器首先加载一个zul页面,相当于静态的html,会根据这个zul创建一些组件以及这些组件有机的混合在一起。
然后zkau引擎和zk客户端引擎一起工作,zk客户端引擎用来捕获事件给zkau引擎,实现了网页的互动动态效果。更新dom树,这样说来是部分刷新了。

组件、页面和桌面
组件就是一个页面ui,比如标签和按钮等。组件必须实现org.zkoss.zk.ui.Component接口。
页面是一系列组件的集合(org.zkoss.zk.ui.page),当zk加载器解释完一个zul的时候就自动创建一个页面。
桌面是页面的集合(org.zkoss.zk.ui.desktop)。 
一个页面可以有多个根组件,可以通过getRoot方法获得。
将一个组件附加到页面的2中方法:1、调用setPage方法使一组件称为页面的根组件。2、调用setParent、insertBefore、appendChild成为另一个组件的子组件。通过setPage方法将其参数设为null可以把一个组件从页面移除。

id空间。之所以要引入id空间就是要维护唯一性,独一无二性。最简单形式是window(org.zkoss.zul.window)
window衍生出来的所有组件形成一个独立的id空间。只要是实现了(org.zkoss.zk.ui.idSpace)接口就是一个id空间,因此一个组件也是一个id空间,page实现了这个接口,他是一个空间所有者。一个id空间的最高组件就是空间所有者,通过getspaceOwner方法来获得这个组件。
相同id空间内的组件称为fellows,可以使用IdSpace或者是Componet接口中得getFellow方法获得另一个fellow。getFellow方法可以被同一id空间内的任何组件调用,不仅限于空间所有者。getSpaceOwner方法返回的是同一对象,就是空间所有者,id空间内的任何组件都可以使用这个方法。 --------------------编程问答-------------------- 楼主,能不能加个好友。我公司也在用ZK。我表示我真的很需要你的帮助。qq164858613 --------------------编程问答-------------------- 也是刚看,楼主写的不错 --------------------编程问答-------------------- 还以为是2k.
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,