Dict.CN 在线词典, 英语学习, 在线翻译

都市淘沙者

荔枝FM Everyone can be host

统计

留言簿(23)

积分与排名

优秀学习网站

友情连接

阅读排行榜

评论排行榜

Tapestry总架构

原文:http://bilang.rocklv.net/Tapestry.html
hideTapestry
hide开发调试
hide禁止缓存参数
leaf-Dorg.apache.tapestry.disable-caching=true -Dorg.apache.tapestry.enable-reset-service=true
hide调试参数
leafset JAVA_OPTS="-Dorg.apache.tapestry.disable-caching=true" set JPDA_ADDRESS=8000 set JPDA_TRANSPORT=dt_socket catalina jpda start
hide表单验证
hidedelegate
leaf方案1:打印出错信息需要new一个ValidationDelegate。
leaf方案2:.page文件中配置<bean>标签
leaf方案3:.page中不配置<bean>,抽象方法上使用元数据@Bean
hidevalidators
leaf.page文件中每个需要验证的表单元素组件绑定一个validators
leaf表达式:validators:+判断条件+[错误提示]
hide空输入问题
leaft4默认空都可以验证通过
leaf通过[value="validators:required"]来保证输入不为空
leafFieldlable可以与TextField绑定显示错误信息
hide客户端验证
leaf在Form组件中绑定<binding name="clientValidationEnabled" value="true"/>
hide若表单输入验证正确,逻辑上的验证应该在监听方法中进行
leaf例如:苹果库存只有20,用户买进50,这是非法的
leaf验证时应向ValidationDelegate记录出错信息
hide创建delegate
leafdelegate.setFormComponent((IFormComponent) getComponent("XXX"));
leafdelegate.recordFieldInputValue(Integer.toString(XXXX));
leafdelegate.record("XXX must be >=0",ValidationConstraint.TOO_SMALL);
hideidea组件复用
leaft4中一个组件不能用两次,即一个jwcid不能在.html中重复出现
leaf解决方案:组件重命名。<compoment id="rename" copy-of="name">
leaf“@Class@XXX”表示访问一个class的XXX静态方法或静态变量. 其中Class为完整路径(既包括包名)
hide判断按钮是否clicked三种方式
leaffull-1对每个button使用一个Form组件
leaffull-2给每个button添加一个“tag”,通过tag值判断which按钮be clicked
leaffull-3为每个button添加一个listener(简单、面向对象,推荐使用)
hideideasubmit提交原理
hide监听方法获得参数的方式
leaf1、实现IRequestCycle会的监听方法的参数
hide2、声明带正确参数顺序的监听方法,t4自动boxing
leaf* public type method(parameters)
leaf* public type method(IRequestCycle cycle, parameters)
leaf * public type method()
leaf* public type method(IRequestCycle cycle)
hide3、实现提交后转页
leafpublic void listener(IRequestCycle cycle) { return cycle.active("PageName");}
leafpublic String listener(IRequestCycle cycle) {return "PageName";}
leafpublic IPage Listener(IRequestCycle cycle) {return (IPage)pageName;}
leaf页面提交后,t4会从页面pool重新获得或创建page object。因此提交前后同一页面的页面对象引用是不一样的,实例变量可能会一样也不可能一样。
leafbutton_ok因此不要在页面对象在定义成员变量(包括页面组件对应的成员变量),因为跨页面访问他们总是无效的有潜在危险。
hide上面问题的解决方案
leaf1、使用客户端持久化需要访问的持久化成员变量,声明get、set抽象方法,用@Persist("client")注释。 使用时应判断get方法是否为null,因为这种持久化方式不会初始化变量
leaf2、使用抽象get、set方法,由t4来实现。
hideHiveMind模块
leafsession对象可以在hivemodule.xml中配置
leafhivemodule.xml存放于WEB-INF/classes/META-INF 目录下。或.jar文件的META-INF目录下
leafhivemodule.xml每个模块的id必须唯一,一般以模块包名作为id
hideideasession
hide获得方式
leaf1、声明抽象方法,通过元数据injectState("ObjectName")注释
leaf2、声明抽象方法,在.page中<inject>对象
hide判断存在方式
hideannotation
leaf1、声明抽象方法,该方法命名格式为getXXX()或者isXXX()
leaf2、使用元数据注释@InjectStateFlag("sessionObj")
leaf.page声明<inject type="state-flag" property="userExists" object="sessionObj"/>
leaf注销:使用Servicelink组件的restart service。该service删除sessionObj,并且从定向到首页。
hide安全处理
leaf1、关键性页面应该在页面中进行用户验证,防止匿名用户访问。页面对象实现PageValidateListener接口。
hide2、htmlA-〉login-〉htmlA方式解决方案
leaf该页面类实现IExternalPage,该接口可接受参数
hide参数维护
hideidea客户端保存参数(推荐)
leaf1、使用Hidden组件,并提供该属的get、set方法实现
leaf2、使用元数据@Persist("client"),不能够声明abstract的set、get方法
leafsession保存参数
hidesnippets
hide默认表达式
leaf.html中为literal
hide.page中为OGNL
leafproperty access
leafmathematical expressions
leafmethod invocations
leafreference static fields of public classes
leafcreate new objects, including lists and maps
leafURL中的sp,t3叫服务参数、t4叫监听参数
hidepage对象查询
leaf1、.page中声明
leaf2、在.application声明org.apache.tapestry.page-class-packages中查找(推荐)
hide特殊页面组件
leaf1、$remove$,删除该html元素(即仅去掉某元素)
leaf2、$content$,只生成该元素标签间的的html code, 该元素以外其它元素忽略去掉(即仅保留某元素标签内的内容)
leafideat4通过无参的构造器来创建对象
hide国际化
hidehtml中使用技巧
leaf1、<span key="hello">Hello</span>指名说用字典key
leaf2、必须为<span>标签,且key自不必加前缀(如message:,OGNL:)
leaf3、组件需要国际化,组件的参数(具体看文档)使用“massage:key”表达式。
leaf不同地区的页面风格,以XXX_CN.html这种方式命名
hide字典文件
leaf1、每个page可以拥有一个poperties
leaf2、在WEB-INF下建立${servletname}.properties,所有page共享
hide自定义组件
leaf组件配置.jwc文件推荐最合理是放在WEB-INF下
hidecontrib中的控件的使用
leaf<library id="contrib" specification-path="/org/apache/tapestry/contrib/Contrib.library"/>
hideinput校验
leaf推荐使用writer.beginEmpty("input")
leaf使用writer.begin("input")和writer.end()
hiderewinding(重绕),可以理解为刷新
leafform.isRewinding()
leafcycle.isRewinding()
hide参数
hide组件参数初始化
leaf.jwc中<parameter>设置初始化
leaffinishLoad()方法中初始化
hide参数类型
leafformal:是被定义在组件规范中的组件参数。每个formal parameter有一个特定(区分大小写)的名称,并且被标为required或者optional。
leafinforma:是Html元素的属性参数。(支持ognl表达式)
leaf名字唯一,且通过抽象set、get方法访问
hide两种自定义组件方式
hide1、使用模版
leaf其类应继承自BaseComponent
hide2、使用java code render(无模版)
leaf其类应继承自AbstractComponent实现renderComponent()
leaf在renderComponent()中应合理调用renderInformalParameters() 、 renderBody()等,来render组件标签的informal参数 和body。
leaf在renderComponent()中设置属性,应检查该属性参数是否绑定if (isParameterBound("title"))writer.attribute("title", getTitle());
hide.jwc应指明的5个特征
leaf1、组件类(无,这表明已在.library中申明)
leaf2、该组件是否能使用body(必须)
leaf3、参数的名称和类型
leaf4、是否允许informal参数(必须)
leaf5、保留参数(即informal参数不能用的参数名)
hide引用组件方式
leaf1.在html总使用“@XXX”
leaf2、在.page或.jwc中使用<component>将组件类型和jwcid绑定
hide组件.jwc查询先后路径
hide1、.application的<component-type>指定的路径
leaf适合无模板组件
hide2、.application所在文件夹,一般就是WEB-INF(推荐,无须配置)
leaf适合所有组件
hide3、WEB-INF下的t4的servlet-name文件夹(无须配置)
leaf若在servlet-name文件夹,适合所有组件
leaf若在servlet-name文件夹的子文件夹,仅适合无模板组件
hide4、context的根目录(无须配置)
leaf适合所有组件
hide组件.html查询路径(与.jwc同一目录)
leaf1、WEB-INF目录
leaf2、context根目录
hide如何使用组件库
hide通过library引用
leaf1、.application的<library>指明.library“相对”于.application的路径,以及libID。例如classes/com/aaa/bbb/XXX.library
leaf2、.library中指明组件类的包名 <meta key="org.apache.tapestry.component-class-packages" value="aa.bb.cc"/>
leaf3、.library的<component-type>指明.jwc“相对”于.library的路径,以及设置组件类型XXX(即组件别名);若.jwc,.library作同一目录跳过此步骤(默认为.jwc文件名).
leaf4、在html通过@libID:XXX调用,在.page中通过<component id="box" type="libID:XXX"/>
hide通过application引用
leaf1、.application中<component-type〉指明.jwc“相对”于.application的路径,以及设置组件类型XXX(即组件别名);
hide页面
hide页面html模版
hide搜索路径
leaf1、.page同一目录
leaf2、context根目录
hide页面配置
hide绑定方式
leaf1、静态绑定:即只读,绑定的值在组件规范中指定
leaf2、动态绑定:组件需要的时候,动态绑定通过其指定的JavaBean获得值
hide页面对象
leaf在page文件中声明属性,可以不必在java文件中声明以及其get、set方法
leaft4默认getXXX()抽象方法中的XXX为页面属性,.page不用声明,并使用@InitialValue("value")赋初值.
hide页面对象实例会被缓存(有潜在非法访问问题),解决方法:
leaf覆盖initialize()方法,初始化实例变量。(在放入缓存池时天会调用initialize())
leaf在.page中声明实例变量,.java声明get\set方法(可有可无),t4自动生成代码初始化
leaf实现PageBeginRenderListener接口,在页面render之前初始化参数,可防止空指针异常
hide获得转页页面对象
leaf.page不用任何声明,.java提供抽象方法和元数据
leaf.page中inject页面属性,.java中提供抽象方法
hide查找class顺序
leaffull-1As indicated in the page specification
leaffull-2searching the packages listed in the application specification
leaffull-3The application specification's org.apache.tapestry.default-page-class property
leaffull-4The global property org.apache.tapestry.default-page-class
hide4种监听方法
leafpublic type method(parameters)
leafpublic type method(IRequestCycle cycle, parameters)
leafpublic type method()
leafpublic type method(IRequestCycle cycle)
hidesnippets
leafactivate()不会立即转页,它仅保存页面对象引用在IRequestCycle中。listener执行结束后才会转业。
hide使用元数据inject页面和属性,可以不用在.page中进行声明
leaf获得页面使用@injectPage("pageName")
leaft4中若发现该类包含一个未实现的“getXXX”方法,会默认产生一个实例变量XXX。该实例变量没有初始化方法,可以在getXXX()声明@InitialValue("literal:initValue")解决
leaf每个页面对象都报含一个Map,保存bean。(没有则自动创建,返回页面池时bean自动销毁1)若要在.page中获得一个已定义的Bean,使用beans前缀调用。例如:beans.beanId.beanProperty。
leafFor、Foreach使用时,要在.page中对<source>集合对象内的元素声明<property>。以方便t4,生成get、set方法。
hidetapestry组件
hideDrectLink与ExternalLink区别
leaf1.DirectLink涉及session,它有一个布尔型参数stateful来选择stateful 和 stateless,默认为true即stateful,而ExternalLink仅仅是stateless,不能选择
leaf2.DirectLink通过Listener监听方法将参数“扔”给下一个页面,只要定义了跳转页面就OK,参数自动扔到跳转页面里。而ExternalLink通过下一个页面实现IExternalPage接口及activateExternalPage方法接收参数 DirectLink接收参数时要注意,返回值是Void,要符合监听方法规则
leaf3.DirectLink用DirectService,ExternalLink用ExternalService。另外Form提交用的是DirectService。

posted on 2006-03-11 08:50 都市淘沙者 阅读(1095) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: