150 likes | 301 Views
Corner2 简介. 简介 Corner 开发环境 了解 Corner 组件介绍 Demo 参考资料. 简介. Corner 是一个快速开发 J2EE 应用的框架,采用 spring 作为核心 service 的管理,采用 hibernate 作为持久化层,采用 tapestry 作为其展现层 . 框架通过开发 tapestry 组件以实现功能复用,做到一次开发处处使用,一次修改处处变化。框架中已涵盖项目开发中常见的组件。可以把主要精力放到业务的实现。 Tapestry 简介:
E N D
Corner2 简介 by:李少卿(lishaoqing2007@msn.com) 2012-04-20
简介 • Corner开发环境 • 了解Corner • 组件介绍 • Demo • 参考资料
简介 • Corner是一个快速开发J2EE应用的框架,采用spring作为核心service的管理,采用hibernate作为持久化层,采用tapestry作为其展现层. 框架通过开发tapestry组件以实现功能复用,做到一次开发处处使用,一次修改处处变化。框架中已涵盖项目开发中常见的组件。可以把主要精力放到业务的实现。 • Tapestry简介: Tapestry是一个强有力、开源、基于Java的用于开发高端WEB应用的framework。它是JSP的一种替代方法,使用Tapestry,可以让你的页面看不到一句JSP代码,这使页面看起来非常干净。它可以用很少的代码来构造一个极端复杂的WEB应用。基于组件的开发。 Tapestry好处: 1、非常高的代码复用性,因为在tapestry中,任何事物都可以看作一个可复用的组件。 2、将JSP开发者从繁琐的JSP代码中解脱出来,取而代之的是真正面向对象方法,而不是URL解析。
3、对页面国际化的充分支持 4、精确地错误报告,可以将错误定位到源程序中的行,取代了JSP中那些莫名奇妙地错误提示。 5、充分支持团队开发,美工人员和JAVA开发人员可以融洽地相处,互相都不依赖于对方。 在Tapestry里一个页面,一个按钮,一个input都是组件。 页面文件简单结构:一个.page文件(以XML的格式)、一个HTML模板、一个JAVA类(抽象类)
Corner开发环境 • Eclipse及其插件: m2eclipse, testNG,runJettyRun, svn,ruby, groovy等 • 项目构建工具:maven,nexus
了解Corner • Corner在hibernate,spring,tapestry的基础上构建 • 实现了对基本数据的封装,和对tapestry的扩展。使程序员减少编码,更 多关注业务。 eg: xxxForm.page对应的类class=“corner.orm.tapestry.page.PoFormPage” xxxList.page对应的类为class=”corner.orm.tapestry.page.PoListPage” • 实现了页面之间数据传递的对象化,只需要关注对象,而不必关心对象的细节。 eg: 在corner中,修改页面中一个实体的属性时,不需要传递这个对象的id,而只需传递一个entity即可。 <a paramaters=“ognl:entity” listener=“listener:doEditEntityAction” jwcid=“@DirectLink“ href=“AForm.html” id=“editAction”>
在corner中,严格限定html,page文件的命名规则。在corner中,严格限定html,page文件的命名规则。 用于显示数据的页面需为xxxList.html 对应page为xxxList.page 用于修改 添加数据的页面为xxxForm.html对应page为xxxForm.page • List页面展示数据组件:@contrib:TableView, @For @contrib:TableView 配合@contrib:TableRows,@corner:TablePages来显示表格(table)数据,分页。 eg: • <div jwcid="@contrib:TableView" columns="shortName" element="div" source="ognl:source" persist="client"> • <table> • <tr> • … • </tr> • <tr row="ognl:entity" jwcid="@contrib:TableRows" element="tr"> • … • </tr> • </table> • <div jwcid="@corner:TablePages" element="div"/> • </div>
@For eg: <tr jwcid="@For" source="ognl:versionInfo" value="ognl:entity" element="tr"> • List页面查询,Form页面提交需使用Form组件,其他如input,submit等组件需包含在Form组件内。 eg: xxx.html <form jwcid=“AQueryForm”> xxx.page <component type=“Form” id=“AQueryForm”> <binding name=“listener” value=“listener:doQueryEntityAction”/> <binding name=“delegate” value=“ognl:beans.delegate”/> </component>
实体之间的关系有one one-to-many many-to-many • Corner提供了封装好的页面类(.page文件里指向的java类)。方便处理这些实体间的关系。如有需要可以继承实现自己的业务。 • corner.orm.tapestry.page.PoListPage 抽象的对所有实体的操作。用于处理one的list页面。如需扩展请继承其父类。 • corner.orm.tapestry.page.PoFormPage 对实体的表单操作。用于处理one的Form页面。如需扩展请继承其父类。 • corner.orm.tapestry.page.relative.ReflectRelativeEntityListPage 适用于对one-many/many-to-many时候many端列表的操作 • corner.orm.tapestry.page.relative.ReflectRelativeEntityFormPage 适用于one-to-many时候,对many端的实体操作 • corner.orm.tapestry.page.relative.ReflectMultiManyEntityFormPage 适用含有多个关联关系的实体操作。如实体A,B是many-to-many。在同一个页面编辑A并展示A关联的B的集合。并对B有编辑,删除,新增功能。抽象来说就是在同一个页面包含A,B两个实体的操作,且A,B有关联关系。
corner.orm.tapestry.page.relative.ReflectRelativeMidEntityFormPagecorner.orm.tapestry.page.relative.ReflectRelativeMidEntityFormPage 适用于中间表(many-to-many)的操作 • corner.orm.tapestry.page.relative. ReflectRelativeSelectionListPage 适用于对many-to-many时候对另外一个many端进行选择的操作,提供一个选择的列表。 • corner.orm.tapestry.page.relative. IPageRooted<T,E> interface 有关联关系的页面,通常为了记录根对象 • corner.orm.tapestry.page. EntityPage interface 基本的实体操作接口。所有的页面都实现了此接口 • corner.orm.tapestry.page. IBlobPage interface 抽象的针对blob的页面. • corner.orm.tapestry.page. IDialogAction<T> interface Dialog的接口 • 其他page相关的类请参考corner.orm.tapestry.page.*
需要注意的方法 public IPage doSaveEntityAction() :Form页面用来保存entity protected IPage getEntityListPage():保存之后跳转到的页面 public IPage doQueryEntityAction():List页面用来查询的监听方法 public IPage doDeleteEntityAction(T entity):删除实体 public IPage doEditEntityAction(T entity):编辑实体 public IPage doNewEntityAction():新增实体 public Criteria createCriteria(Session session):查询 使用QBC publicvoid appendOrder(Criteria criteria):排序 public IBasicTableModel getSource():列表source配合@contrib:TableView 使用 • 其他方法请参照代码或API。 • PS tapestry的跳转只要返回IPage对象就可以,也可以返回EntityPage。
验证 格式化 • Tapestry提供丰富的验证(validator) 需要扩展请继承BaseValidator • Tapestry提供了基本的格式化(translator),需要扩展请继承相应的translator或AbstractTranslator • 源码请看corner.orm.tapestry.translator, corner.orm.tapestry.validator • 国际化 Html中 <span key="link.edit">edit</span> 生成html文件同名的properties文件,指定可以对应的国际化 如:xxList_zh.properties
组件的使用 组件的使用很简单,在前边介绍@contrib:TableView, @For的时候已经看到一部分。 简单来说有2种方法: html:需要有@ <span jwcid="@Insert"value="ognl:entity.name">name</span> page: page中定义,html中使用 <component type="TextField" id="nameField"> <binding value="message:name" name="displayName"/> <binding value="translator:string" name="translator"/> <binding value="ognl:queryEntity.name" name="value"/> </component> <input jwcid="nameField" />
组件介绍 • Tapestry组件 Tapestry提供了丰富的组件,具体请看:http://tapestry.apache.org/tapestry4/tapestry/ComponentReference/Body.html • Corner组件 请参见:Corner_famulus.doc Corner3已经发布,敬请期待。
参考资料 • 项目托管地址 http://code.google.com/p/corner/ • corner-reference.pdf Corner_famulus.doc http://code.google.com/p/corner/downloads/list • Tapestry4 http://tapestry.apache.org/tapestry4/tapestry/ • Tapestry5 http://tapestry.apache.org/ • 进阶书籍:EnjoyWebDevWithTapestry