Version37版—ZK开发手册.doc_第1页
Version37版—ZK开发手册.doc_第2页
Version37版—ZK开发手册.doc_第3页
Version37版—ZK开发手册.doc_第4页
Version37版—ZK开发手册.doc_第5页
已阅读5页,还剩215页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Version 3.7ZK开发手册Version 3.7版ZK开发手册目录Version 3.7版ZK开发手册1第1章简介14传统的Web应用程序14点对点(Ad-hoc)AJAX应用14ZK: 它是什么15ZK: 它不是什么16ZK: 局限16第2章让我们开始吧16Hello World!16互动性17zscript元素17脚本语言18将脚本代码放在一个单独的文件中18attribute元素18EL表达式18id属性19if 和 unless属性19forEach属性20use和 apply属性20use属性20apply 属性21以 zscript实现Java类21与forward属性一起使用22手动创建组件22不使用ZUML来开发ZK应用程序23为某一页面定义新的组件24第3章基础24架构概况24执行流25组件,页面和桌面26组件26页面26页面标题26桌面26createComponents 方法26组件树的森林26组件:视觉部分和Java对象27标识27UUID27ID空间27命名空间和ID空间28在zscript中定义变量和函数29zscript和EL表达式29多范围(Multi-Scope)的解释器30Java解释器(BeanShell)30单范围(Single-Scope)解释器31在一个页面中使用多种脚本语言31getVariableVS getZScriptVariable31事件32桌面和事件处理32桌面及创建组件32ZUML 和XML命名空间32第4章组件活动周期32加载页面的活动周期33页面初始阶段33组件创建阶段33事件处理阶段33响应阶段33更新页面的活动周期33请求处理阶段34事件处理阶段34响应阶段34模型(The Molds)34组件垃圾回收34第5章事件监听及处理34通过标记语言添加事件监听器35通过程序添加或移除事件监听器35声明一个成员35动态地添加与移除事件监听器35延期事件监听器36为页面动态地添加和移除事件监听器36调用顺序37中止调用序列37事件监听器提交,发送和回显事件37提交事件37发送事件38回显事件38线程(Thread)模型38挂起及恢复38长操作(Long Operations)39选择1:服务器推动39安全问题40幕后41选择 2:线程挂起和恢复41事例:一个异步产生标签的工作线程41选择 3: Timer(没有挂起/恢复)43选择 4:捎带(piggyback)(没有挂起/恢复,没有Timer)43初始与清理事件处理线程44处理每个事件前的初始化44处理完每个事件后清理45第6章ZK用户界面标记语言45XML45元素必须格式良好46特殊字符必须被替换46属性值必须被指定且用引号包围47注释47字符编码47命名空间47使用Schema 自动完成48条件式流程48If 和Unless48Switch和Case48复合Case49正则表达式49和forEach一起使用49Choose 和 When49反复式流程49each变量50forEachStatus变量50如何在事件监听器中使用 each和forEachStatus 变量51一个解决方法:定制属性51随机存取(Load on Demand)52使用fulfill属性的随机存取52使用事件监听器的随机存取52隐含对象52隐含对像列表53关于Request和Execution的信息54进程指令54page指令54component指令54宏格式(The by-macro Format)54类格式(The by-class Format)55init指令55variable-resolver指令56import指令56link和meta指令56ZK属性57apply属性57use属性57if属性57unless属性57forEach属性57forEachBegin属性58forEachEnd属性58fulfill属性58使用URI表达式58onFulfill事件59forward属性59Forward事件59为Forward事件传递信息60Forward条件内的EL表达式60ZK元素60zk 元素60一个页面中的多个根元素60通用的迭代组件61zscript元素61如何推迟赋值62如何选择一种不同的脚本语言63如何支持更多的脚本语言63attribute元素63variables元素64和composite属性一起使用 List 和 Map值64null(The null Value)65为一个变量分配保留名65custom-attributes元素65组件集及XML命名空间66标准的命名空间66第7章ZUML页面及XUL组件集67基本组件67标签67pre, hyphen, maxlength 和multiline 属性68按钮68onClick 事件 和href属性69org.zkoss.zk.ui.Execution接口的 sendRedirect 方法69单选按钮和单选按钮组69多用途设计版面69图像70本地图像70图像映射(Imagemap)70区域71shape属性71音频72输入控件72type属性72format属性72约束73Datebox的约束73定制属性73定制方式显示错误信息74提高响应能力75onChange事件75onChanging事件75日历75value 属性和onChange事件76compact属性76进度条76Slider76计时器76分页76List Boxes 和 Grids的Paging77窗口77标题77closables属性78sizable属性78onSize事件78样式类78contentStyle属性79滚动窗口79边框79重叠,弹出,Modal,标示和嵌入79嵌入80重叠80弹出80Modal80标示80Modal窗口和事件监听器81position属性82通用对话框83消息框83文件上传对话框83一次上传多个文件83fileupload组件84onUpload事件84OnClose事件84文件下载对话框84布局组件85嵌套的borderlayout组件86size 和 border属性86splittable 和collapsible 属性87maxsize和minisize 属性87flex 属性87open 属性87onOpen 属性87箱式模型88spacing属性88widths 和 heights 属性89分割器89collapse属性90open属性90onOpen事件90Tab箱90嵌套tab box91The Accordion Tab Boxes91orient属性92Tabs的align属性92closable属性92disabled属性93Tab面板的随机存取93网格94滚动网格94可变列宽95onColSize事件96分页网格96pageSize属性97paginal属性97paging属性98OnPaging事件及方法98排序98sortDirection属性99onSort事件99sort方法99实况数据100实况数据的排序100辅助表头100特殊属性101spans属性101更多的布局组件102Separators 和空格102Group boxes103contentStyle属性及滚动Groupbox103工具栏103菜单栏104执行一个菜单命令104像复选框一样使用菜单项目105autodrop属性105onOpen事件105更多的菜单特性105上下文菜单105定制的tooltip及弹出菜单106onOpen事件107列表框107多列列表框108栏头108栏尾108下拉列表109多选109滚动列表框109rows属性110可变列表头110分页列表框110排序110sortAscending 和 sortDescending 属性111sortDirection属性111onSort事件111sort方法111特殊属性112checkmark属性112vflex属性113maxlength 属性113实况数据113为实况数据排序114包含按钮的列表框114树控件115open属性和onOpen事件116多选116分页117onPaging和 onPageSize事件117特殊属性117rows属性117checkmark属性117vflex属性117maxlength属性117可变列宽117Tree控件的打开时创建117下拉列表框118autodrop属性118description属性118onOpen事件119onChanging事件119Bandboxes120closeDropdown方法120autodrop属性121onOpen事件121onChanging事件121图表121实况数据122向下钻取(onClick事件)122操作区123拖放123draggable 和 droppable属性123onDrop 事件124使用多选拖曳125可拖曳组件的多种类型125HTML相关组件126html组件126Native命名空间,/2005/zk/native127使用Native输出另外的命名空间127XHTML命名空间, /1999/xhtml128include组件128将值传递至包含页面129包含ZUML页面129style组件129script组件130iframe组件130onURIChange事件131与其他技术的整合131用HTML FORM 和Java Servlets131name属性131支持name属性的组件132丰富用户界面133客户端行为133引用一个组件133一个onfocus和的onblur例子134强制规则134onshow和onhide 行为134改变window如何出现的例子134CSA JavaScript工具134action对象135comm对象135anima对象135事件137鼠标事件137按键事件138ctrlKeys属性139输入事件139List和Tree 事件140Slider和Scroll事件141其它事件141Radio和radiogroup的事件流142第8章数据绑定142基本概念143添加一个数据源143建立数据绑定管理器144将UI组件关联至数据源144何时从数据源加载数据至UI144何时从UI组件保存数据至数据源145将相同的数据源关联至多个UI组件146关联UI组件和一个集合147在数据源和UI组件间定制转换148定义数据绑定管理的访问权限149第9章在ZUML中使用XHTML组件集150目标150有效的XHTML页面即为有效的ZUM页面150以服务器为中心的交互151像平常一样使用Servlet151差异152为每个标签创建一个组件152UUID即为ID152副作用153所有标签都有效153大小写153无模型支持153浏览器端的DOM树153TABLE和TBODY标签153事件154与JSF, JSP及其它的集成154使用已存在的Servlet154使用包含丰富154丰富一个静态的HTML页面154使用ZK JSP标签155使用ZK JSF组件155使用ZK Filter丰富动态生成的页面156第10章宏组件157使用宏组件的三个步骤157第一步. 实现157第二步 . 实现157其它属性157第三步. 使用158传递属性158arg.includer158内联宏158一个例子159常规宏159宏组件和ID空间159从外部访问子组件160访问定义在Ancestor的变量160运行时改变macro-uri160增设方法160在java中增设方法161在zscript中增设方法161当实例化时重写实现类162手动创建一个宏组件162第11章高级特性163标识页面163表示组件163组件路径163排序164浏览器的信息及控制165onClientInfo事件165org.zkoss.ui.util.Clients 类165防止用户关闭窗口165浏览器的历史管理166添加合适的状态到浏览器历史166监听onBookmarkChange事件并据此操作桌面167为iframe使用书签功能167一个简单的事例167组件克隆168组件序列化169序列化会话170序列化监听器170跨页面通信170提交和发送事件170属性171跨Web应用程序通信171来自路径的Web资源171注释171注释ZUML页面171注释组件声明的标准方式171注释属性(Property)声明的标准方式172注释属性声明的简单方式172注释组件声明的简单方式172手动注释组件173获取注释173Richlets173实现org.zkoss.zk.ui.Richlet接口173每个URL一个Richlet174配置web.xml 和zk.xml174会话超时管理175错误处理175加载页面时的错误处理176ZK Mobile错误处理176更新页面时的错误处理177更新页面时ZK Mobile错误178其它178配置ZK加载器不压缩输出178第12章性能提示179使用编译过的Java代码179使用deferred 属性179deferred属性和onCreate事件180使用forward属性180使用Servlet 线程处理事件181模态窗口181消息框181文件上传182使用本地命名空间代替XHTML命名空间182延长时期(Prolong the Period)检查文件是否被修改183延迟子组件的创建183为大型Listbox使用实况数据和分页183使用ZK JSP标签或ZK JSF 组件代替ZK Filter183第13章其它设备和输出格式184ZK Mobile184Mobile组件集, /2007/mil185XML输出185使用ZUML页面输出产生XML 输出的三步185使用XML组件集, /2007/xml185将文件扩展映射到ZK加载器186将文件扩展映射到XML组件集186XML组件集187The XML Transformer187第14章国际化188地域188px_preferred_locale会话属性188请求拦截器189时区189px_preferred_time_zone 会话属性190请求拦截器190标签190本地文件190浏览器和本地URI190在Java中定位浏览器与本地资源191消息191主题191改变字体大小和/或样式192使用Library 属性192使用内置的小字体主题192使用内置的大字体主题193根据Locale使用主题193使用自制主题193主题提供者193第15章数据库连接193ZK仅为表现层194使用JDBC的简单方式 (但不推荐)194使用连接池195打开及关闭一个连接195配置连接池197Tomcat 5.5 + MySQL197JBoss + MySQL197JBoss + PostgreSQL198易于数据库访问的ZK特性198org.zkoss.zk.ui.event.EventThreadCleanup 接口198在EL表达式中访问数据库199实现org.zkoss.zk.ui.util.Initiator接口200事务处理和org.zkoss.zk.util.Initiator201J2EE事务处理及Initiator201Web 容器和Initiator201第16章整合Hibernate202什么是Hibernate202安装Hibernate202配置ZK的配置文件203创建Java对象203映射Java对象204使用映射文件204使用Java注释204创建Hibernate 配置文件205使用映射文件206使用Java注释207创建DAO 对象207在ZUML页面访问持久对象208第17章整合Spring209什么是Spring209使用Spring的准备209将spring.jar复制到你的Web library209配置web.xml209创建Spring配置文件209创建Spring Bean类210在ZUML 页面内访问 Spring Bean210使用 variable-Resolver210使用 SpringUtil211Spring Security211运行一个简单的应用程序211使用Spring Security的准备211配置/WEB-INF/web.xml 文件212创建 /WEB-INF/applicationContext-security.xml213定义哪些服务被保护214定义那些ZK事件被保护214ZUML页面215第18章Portal 整合216配置216WEB-INF/portlet.xml216WEB-INF/web.xml217使用方法217zk_page 及 zk_richlet参数和属性217事例217第19章ZK之外218Logger218如何使用ZK配置日志等级218i3-log.conf的内容218被允许的级别219i3-log.conf的位置219禁用所有日志219DSP220iDOM220第1章简介欢迎使用ZK- 一种丰富Web应用程序的最简单方式。此开发手册描述了ZK的概念和功能。关于如何安装配置ZK的环境,请参阅Quick Start Guide。如果想得到的各个组件(components)的属性和方法的详细描述,请参阅Developers Reference。这章描述了Web程序,AJAX技术和ZK项目的历史背景。如果你想马上了解ZK的功能,可以跳过这一章。 传统的Web应用程序以简单高效交换文档为目的的Web技术,例如超文本传输协议(HTTP)和超文本标记语言(HTML),都来源于单页性(page-based )和无状态(stateless-communication)的模式。在这种模式中,一个页面是自给自足(self-contained)的,并且是沟通客户端与服务器端的最小单位。随着网络俨然成为应用开发的默认平台,这种模式面临着巨大的挑战:对于表现当今应用程序中复杂性的无能为力。举个例子,为了给客户报价,你或许必须打开另一个页面来查询此客户的交易记录,再打开一个页面来显示当前的价格,还得开一个页面来存储当前信息。用户被迫离开他正在工作的页面,并且在几个页面间来回浏览。这很容易迷失,混淆,结果是把客户弄得不愉快,销售机会的损失和低生产力。在这种单页性(page-based )的模式上开发一个现代的应用程序也是一个极大的挑战。在这种模式中,运行在服务器上的应用程序必须处理来自从语法上分析请求,送出回应 ,连接用户从一个页面到另一个页面路由的一切,并且处理用户的各种错误。 数十种框架,例如Struct,Tapestry和JSF,随即出现用来简化开发过程。由于单页性(page-based)模式与现代模式之间的巨大差别,学习和使用这些框架并不是一个愉快的过程,更不要提直觉感知(intuition)和简化了。点对点(Ad-hoc)AJAX应用经过数十年的演变,Web应用已经从静态HTML发展到DHTML,applets,Flash,最后发展到了AJAX1 (Asynchronous JavaScript and XML ,非同步的JavaScript和XML )。通过谷歌地图及推荐(Google Maps and Suggest)的说明,AJAX技术通过提供与桌面应用程序同等水平的互动性和反应能力给Web应用带来了新生命。不同于applets或Flash,AJAX基于标准的浏览器和JavaScript,并且不需要专门的插件。AJAX是新一代的DHTML,就像DHTML,它在很大程度上依赖于JavaScript监听用户活动产生的事件,然后动态的操纵浏览器中一个页面(亦称 DOM)的视觉表现。此外,它更近一步,能够使与服务器的沟通异步进行,即不需要离开或提交整个页面。它通过引入客户与服务器间轻量级的通信(light-weight communication )打破了基于页面的模式。妥善设计,AJAX可以给Web应用带来丰富的桌面通用组件,而且在Web应用程序的活动周期内可以动态更新这些组件并通过应用程序获得对组件的更多控制。当提供给用户需要的交互性的同时,AJAX给已经很昂贵的Web应用程序开发增加了复杂性和技术先决条件。开发者不得不在浏览器中操纵DOM,并且使用不兼容甚至是错误的JavaScript与服务器通信,为了更好的交互性,开发者必须重复复制应用数据和业务逻辑以便于浏览。这样就增加了维护成本且面临在服务端与客户端同步数据的挑战。底线是在关于处理请求方面,点对点(Ad-hoc)的AJAX应用与传统的Web应用没有区别。开发者仍然必须解决由单页性(page-based)和无状态(stateless-communication)模式造成的隔阂。1 Ajax是由Jesse James Garrett於Ajax: A New Approach to Web Applications中所提出的。ZK: 它是什么 ZK是一个事件驱动(event-driven)的,基于组件(component-based)的,用以丰富网络程序中用户界面的框架。ZK包括一个基于AJAX事件驱动的引擎(engine),一套丰富的XUL和XHTML,以及一种被称为ZUML(ZK User Interface Markup Language,ZK用户界面标记语言)的标记语言。有了ZK,您可以利用XUL和XHTML的丰富特性来呈现您的Web应用,操纵它们来处理因用户活动而引发的事件,就像在桌面应用程序中那样。不同于大多数其它框架,就ZK而言,AJAX是一种幕后(behind-the-scene)技术,组件内容的同步和流水线事件(pipelining of events)都由ZK引擎自动完成。您的用户获得了如同桌面程序的互动性和反应能力,而您的开发仍然像开发桌面应用程序那样简单。除了简单的模型和丰富的组件,ZK也支持一种文本标记语言,称为ZUML。ZUML,如同HTML,可以让开发人员设计界面而无需编程。通过XML的命名空间,ZUML无缝的集成了一套不同的标签2到同一页面。目前,ZUML支持两套标签,即XUL和HTML。为了方便快速模型开发(prototyping)和定制,ZK允许开发人员嵌入EL表达式,以及您喜欢的脚本语言,包括但不限于 Java3, JavaScript4, Ruby5 and Groovy6. 开发人员可以选择不嵌入任何脚本语言,如果他们喜欢更严格的要求(discipline)。不同于JavaScript嵌入在HTML,ZK在服务器端执行所有的嵌入脚本。注意一切运行在服务器端是从应用程序开发者的角度出发的。组件开发人员必须平衡互动性与简单性来决定什么任务由浏览器来完成,而什么任务由服务器来完成。2 标签是XML元素。组件是在当ZUML网页被翻译时所产生出来的。3 使用BeanShell()的Java interpreter。4 使用Rhino (/rhino)的JavaScript interpreter。5 使用JRuby (/)的Ruby interpreter。6 使用Groovy (/)的Groovy interpreter。ZK: 它不是什么ZK并没有关注持久化(persistence)或伺服务器之间的沟通(inter-server communication)。ZK被设计的尽可能的简单,它只针对表示层(presentation tier)。他并不要求和暗示任何后端技术,所有你喜欢的中间件就像以前一样工作,如JDBC, Hibernate, Java Mail,EJB 或 JMS。Zk并没有为开发人员提供(tunnel),RMI或其他的API用来在客户端与服务器端通信,因为所有的代码都运行在同一服务器的同一Java虚拟机(JVM)上。ZK并没有强迫开发人员使用MVC或其他设计模式。是否使用它们由开发人员选择。ZK并不是旨在把XUL带入Web应用的框架。它的目标是把桌面编程模式引入Web应用。目前,它只支持XUL和XHTML。将来它或许会支持XAML, Xquery及其它。ZK将AJAX嵌入到了现今的应用中(implementation),但它并没有止步于AJAX结束的地方。在ZK Mobile中,您的应用程序可以到达支持J2ME的任何设备,例如PDA,手机和游戏平台。此外,您根本不用修改您的应用程序7。7 根据萤幕大小有时需要做调整。ZK: 局限ZK不适合在客户端运行多任务的应用程序,例如3D动作游戏,除非你写编写一个特殊的组件。ZK也不适合需要大量使用客户端计算能力的应用程序。第2章让我们开始吧这一章的内容描述了如何写出你的第一个ZUML页面,如果你没时间的话建议你至少阅读这一章。此章使用ZUL来说明ZK的功能,但是也适合于其他ZK支持的语言。Hello World!当ZK安装到你最喜爱的Web服务器8后, 你就可以直接编写应用程序。仅需在合适的目录新建一个名为hello.zul的文件9 。 Hello World!然后输入正确的URL,例如:http:/localhost/myapp/hello.zul,得到如下页面 :在ZUML页面中,一个XML元素描述了应该创建。在这个例子中,被创建的是window(org.zkoss.zul.Window),XML属性(attributes)用来指定window组件属性(properties)的值。在这个例子中,创建了window,并指定了title和border属性的值分别为 Hello和normal。XML元素内的文本(即Hello World)也可以通过一个称为Label (org.zkoss.zul.Label)的标签来展示。所以上面的例子和下面的例子是等价的: 也等价于: label value=Hello World!8 参考Quick Start Guide。9 你也可以试试这些例子的在线示范。互动性让我们来添加一些互动元素: 点击按钮,可以看到如下效果:onClick是为组件添加事件监听器的一个特殊属性。这个属性的值可以是任何合法的Java代码。注意我们使用 "来匹配双引号(“)以使其成为合法的XML文档。如果你不熟悉XML,可以在 ZK 用户接口标记语言(ZK User Interface Markup Language )一章中查看有关 XML的部分。alert是一个显示消息对话框的全局函数。它是调用org.zkoss.zul.Messagebox类的一个捷径。 注: 1. 嵌入到ZUML页面的脚本可以用不同的语言编写,包括但不限于Java, JavaScript, Ruby and Groovy。此外,它们是运行在服务器上的。2. 在运行时刻,ZK使用BeanShell解释Java,所以你可以声明全局函数,例如alert。同样 它为大部分的脚本语言提供了一个简单的方式来定义全局函数,有时甚至是类。3. 在ZUML页面嵌入脚本语言前,所有java.lang, java.util, org.zkoss.zk.ui, org.zkoss.zk.ui.event和org.zkoss.zul包中的类都已经被引入。zscript元素zscript是一个用来定义代码的元素,当ZUML页面被提交时被赋值(evaluated)。典型的应用包括初始化和申明全局变量与方法。注: 你不可以在zscript代码中使用EL表达式。 例如,下面的例子展示了每次按钮被按下时显示的不同信息。 int count = 0; void sayHello() /declare a global function alert(Hello World! + +count); 注: zscript仅当页面被加载时赋值(evaluated)一次,通常被用于定义函数和初始变量。脚本语言Java是ZK默认的脚本语言,但是你可以通过指定language属性来选择不同的语言,就像下面的例子一样。language属性区分大小写。 alert(Say Hi in JavaScript); new Label(Hi, JavaScript!).setParent(win);你可以像下面的例子一样使用前缀 javascript:来为事件处理器指定脚本语言。注意:不要在自己指定语言的前面或后面添加空格。你可以在同一页面中使用不同的脚本语言。将脚本代码放在一个单独的文件中为了分离代码和视图(views),开发人员可以将将脚本代码放在单独的文件中,例如sayHello.zs,然后使用src属性指向此文件。 假设sayHello.zs文件的内容如下:int count = 0;void sayHello() /declare a global function alert(Hello World! + +count);attribute元素attribute元素是用来定义XML元素属性的元素。妥善使用,它可以使页面更具可读性。下面的例子和前面所述的hello.zul是等价的。 alert(Hello World!);你可以决定是否使用trim属性来省略属性值开头和末位的值,使用方法如下: The leading and trailing whitespaces will be omitted. EL表达式就像JSP一样,你可以在ZUML页面的任何部分使用EL表达式,但除了属性的名字(names of attributes),元素(elements)和处理指令(processing instruction)。EL表达式的语法格式为$expr,例如:$mapentry$3+counter is $empty map提示: empty是用来测试一个map, collection, array 或者string 是否为null或空的。提示: mapentry是读取map元素的一种方法,换句话说,就像Java中的 map.get(entry)。当一个EL表达式作为一个属性值时,它可以返回任何类型的对象,对象的长度限制在组件可以接受的范围内。在下面的例子中,表达式被赋予一个Boolean对象的值: 10提示: + 在EL表达坏中是算数操作,并不能用于string类型。对于string可以使用 $expr1 is added with $expr2。 标准的隐含对象(implicit objects),如param和requestScope,还有ZK的隐含对象,如self和page,可以很简单的使用。为了引入一个方法,你可以按如下方法使用xel-method处理指令(processing instruction) 。通过从TLD引入EL函数,你可以使用被称为tablib的指令,就像下面:Developers Reference 提供了更多关于EL表达式的细节。或者,你可以参考JSP 2.0的指南或手册来来获得更多关于EL表达式的信息。id属性为了读取Java代码或EL表达式中的组件,你可以使用id属性来标识它。在下面的例子中,我们为label设置了一个标识,这样当一个按钮被按下时,我们就可以操纵label的值了。 Do you like ZK? 当按下Yes按钮时,可以看到如下效果:下面是一个EL表达式为组件赋值的例子:if 和 unless属性if和unless属性被用于控制是否创建一个组件,在下面的例子中,两个label只有在请求中含有一个为vote的属性时才被创建: 如果两个属性都被指定,将不会创建组件,除非它们的值都被赋值为true。forEach属性forEach 属性用来控制要创建多少组件,如果你为这个对象指定一个对象集合,ZK 装载机(ZK loader)将为每个被指定的集合项目创建一个组件。在下面的ZUML页面中,listitem元素将被赋值三次(分别为Monday, Tuesday 和Wednesday)然后产生三个list项目。contacts = new String Monday, Tuesday, Wednesday; 当使用forEach属性赋值时,每个变量被一个接一个的赋予来自集合的对象,即像先前接触的例子一样。因上面的ZUML页面和下面的是等价的: 另外,你也可以为forEach属性指定一个项目列表,通过逗号来分隔各个项目。 除了使用forEach,还可以通过forEachBegin和forEachEnd来控制迭代(iteration),可以参考ZK用户标记语言一章中ZK属性一节获取详细信息。use和 apply属性在页面中嵌入代码不当会增加维护的难度,有两种途径可以从视图中分离出代码。一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论