tapestry5初体验 -hxzon
-------------------------------------------------
1,生成的URL很友好。漂亮的URL使用了两次请求的机制,不严重影响性能的情况下觉得值得。
2,用@OnEvent(value=EventConstants.ACTIVATE)获取页面参数,而用@SetupRender初始化数据。
@OnEvent(value = EventConstants.PASSIVATE)
3,编辑页面,用@OnEvent(value=EventConstants.ACTIVATE)获取编辑对象的ID并初始化非常惬意,比struts2的两次parameter拦截舒服得多。
4,组合搜索物料,表单获取参数,通过两次请求机制,重写的url带有搜索条件,可被收藏。
//init()->initalize->onPassivate->init(xxx)->display
public Object initialize(Material material,long size,long first){
this.material=material;
page.setPageSize(size);
page.setCurrentPage(first);
return this;
}
@OnEvent(value=EventConstants.ACTIVATE)
Object init(){
return null;
}
@OnEvent(value=EventConstants.ACTIVATE)
Object init(String code, String name, String spec, String desc, String pcb, String state,
String foot, String brand, String supplier, String remark,long size,long first){
this.material=MaterialUtil.toMaterial(code, name, spec, desc, pcb, state, foot, brand, supplier, remark);
page.setPageSize(size);
page.setCurrentPage(first);
return null;
}
@SetupRender
Object display(){
if(material!=null){
page.setRowCount(materialSer.countLike(material));
list=materialSer.getLike(material, page.getCurrentRow(), page.getPageSize());
logger.debug("search result size:"+page.getRowCount());
}
return null;
}
@OnEvent(value=EventConstants.PASSIVATE)
Object onPassivate(){
return MaterialUtil.toUrl(material, page.getPageSize(), page.getCurrentPage());
}
5,捕获异常。
Object onException(Throwable cause) {
logger.error("error", cause);
// ComponentEventException
message = cause.getMessage();
if (cause.getCause() instanceof AuthenticationException) {
return login;
}
return this;// null
}
6,URL中含有空格等,通过URLRewriterRule可以解决,即把路径中的空格都去除。
7,一开始不知道用方括号来传递URL的onActivate参数。
<t:pagelink page="bom/list" context="[50,1]">
--------------------------------------------------
css,js,图片的路径
2,tapestry使用/assets/来处理css,js,图片路径,但是js中的图片路径无法被处理。
不过这个问题可以用URLRewriterRule来解决,即把对图片的请求改写为/assets/请求。
3,/assets/存在安全漏洞,可以用它输出WEB-INF下的文件。
这个问题也可以用URLRewriterRule来解决,即把对WEN-INF下的文件请求改写到其它路径。
---------------------------------------------------
1,页面类注入 @Inject
private HttpServletRequest request;即可发送和读取cookie。
需注意cookie的路径,例如设为"/",否则可能读取不到。
2,使用@Persist和@SessionState来存储会话数据很方便。
---------------------------------------------------
组件
1,通用库的添加。希望改为有顺序的配置,这样可以有同名组件,例如用我的扩展的textfield组件替换掉自带的textfield组件。
public static void contributeComponentClassResolver(Configuration<LibraryMapping> configuration) {
configuration.add(new LibraryMapping("core", "org.hxzon.tapestry5"));
}
2,上传用Upload组件,但是一个参数名只能上传一个文件。不过自己写一个参数名上传多个文件的组件非常容易。
3,下载也很容易,return new FileStreamResponse(upload.getFileName(), upload.getFileType(), targetFile);即可。
4,Grid组件很强大,不过一开始没看到怎么重写grid的标题栏,甚至以为得自己写一个组件覆盖或封转它,直到看源代码才发现不用。
org.apache.tapestry5.corelib.components.GridColumns
public Block getBlockForColumn()
{
Block override = overrides.getOverrideBlock(columnModel.getId() + "Header");
if (override != null) return override;
return standardHeader;
}
//================================
public class GridCell extends AbstractPropertyOutput
{
Object beginRender(MarkupWriter writer)
{
return renderPropertyValue(writer, getPropertyModel().getId() + "Cell");
}
}
5,用layout组件完成页面模板的功能,但是只有<t:body />,没有与sitemesh类似的<t:head/>和<t:title/>。不过通过在layout组件中添加title参数,并在页面使用时传进可类似解决。
但还是喜欢sitemesh,sitemesh是制定规则,然后符合规则的会被应用模板,而tapestry必须每个页面写上这个layout组件,像struts1的Tiles一样。
6,使用@Property注解,省掉了很多getter和setter方法,看起来比较简洁,不过也有一定不便。
@Property强制为private,希望可以放宽至protected。也希望在存在getter或setter时就不要再动态生成该方法,而不是抛出错误。
7,想给textfield组件添加trim功能时发现需要覆盖protected void processSubmission(String elementName)方法,
这时发现所要用的属性都是private的,并且没有getter和setter方法,以为要另起炉灶。
不过尝试发现,只要把属性复制一遍到子类中即可,不会报错。
8,textfield组件把空字符串变为null,替换NullFieldStrategy即可。
public static void contributeNullFieldStrategySource(MappedConfiguration<String, NullFieldStrategy> configuration) {
configuration.override("default", new EmptyNullFieldStrategy());
}
9,struts2中通过parameter拦截器可以统一对所有参数进行拦截处理,tapestry通过对textfield组件的值处理,以及用URLRewriterRule,
也算是能进行统一的处理。
10,if组件功能较弱,因为原先使用ognl动态调用效率太低,不过自己还是写了一个ognlIf。
11,没有CheckboxGroup,自己写了一个,也是用ognl完成的。
12,写了一个分页的组件,SplitPageBar,基于简单的URL。
-------------------------------------------------------
模板
1,表达式用惯了ognl,jsp,所以tapestry的表达式感觉比较弱。
分享到:
相关推荐
5. **tapestry-upload-LICENSE.txt**:关于Tapestry中文件上传功能的许可信息,帮助开发者处理用户通过表单提交的文件。 6. **tapestry-spring-LICENSE.txt**:Tapestry与Spring框架集成的许可,Spring是一个广泛...
在"tapestry-project-4.1.5"这个压缩包中,我们有机会深入探索 Tapestry 4.1.5 版本的特性和应用。 首先,让我们关注"Tapestry-libraries"这个文件夹。它包含了Tapestry 框架运行所需的各种库文件,这些库文件是...
`apache-tapestry-5.3.8-bin.zip` 是Apache Tapestry 5.3.8版本的二进制发行包,包含了运行和开发Tapestry应用所需的各种库文件。 1. **Tapestry框架**:Tapestry是由Howard Lewis Ship创建的一个MVC(Model-View-...
Tapestry5和jQuery集成.使用jQuery以极少的兼容问题完全替换Prototype 和 Scriptaculous库 标签:tapestry5
`tapestry-jpa-5.3.7.jar`和`tapestry-hibernate-5.3.7.jar`则与持久层集成有关,它们支持JPA(Java Persistence API)和Hibernate ORM框架,使开发者能够轻松地在Tapestry应用中处理数据库操作。 总的来说,Apache...
在"tapestry-ioc-5.0.3-src"这个压缩包中,我们可能找到Tapestry IOC框架的源代码,这对于开发者深入理解其工作原理和定制功能非常有价值。 1. **依赖注入(DI)**:Tapestry IOC的核心概念就是DI,它允许对象在...
tapestry-spring-5.2.6.jar,java spring框架依赖,可以直接使用
标题中的“tapestry-bin-5.0.14.zip”指的是Tapestry的最新版本5.0.14的二进制发行包,它包含了开发人员构建基于Tapestry应用所需的所有组件和库。 Tapestry 5.0.14的发布旨在提供更加稳定和高效的开发环境,为...
这个压缩包包含了多个以"Tapestry"开头的子文件,如 "tapestry-core", "tapestry-hibernate", "tapestry-ioc", "tapestry-upload", 和 "tapestry-spring",这些都是Tapestry框架的不同模块或插件。这些文件的后缀是...
Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...
- **项目名称**:Tapestry-3-Getting Started - **项目目标**:开发一个基于Web的货币转换器应用。 - **技术栈**:Tapestry 3、Eclipse IDE、Apache Tomcat。 #### 二、开发环境搭建 ##### 1. Eclipse IDE安装 - **...
《Tapestry 5:构建Web应用程序》是关于Tapestry 5框架的一本权威指南。Tapestry 5是一个强大的Java Web应用框架,由Apache软件基金会开发并维护,它致力于提供一种更高效、更优雅的方式来构建动态、交互式的Web应用...
在压缩包"tapestry-monitoring-master"中,我们可以期待找到项目的源代码、文档和可能的构建脚本。源代码将展示如何与Tapestry5集成,并通过JMX提供监控数据。这通常包括配置文件、MBean的实现以及与Tapestry5交互的...
【Tapestry4.1.2 入门-介绍】 Tapestry 是一个基于Java的Web应用程序框架,它提供了一种面向组件的开发方式,极大地简化了Web应用的构建过程。在Tapestry中,开发者无需关注HTTP请求的处理细节,如链接、请求流向和...
包含: tapestry 的源代码, tapestry集成spring2.0 tapestry快速启动 tapestry upload tapestry hibernate tapestry annotations
本教程旨在通过实际案例帮助读者掌握Tapestry 5的基本概念和核心功能,并体验其带来的高效开发流程。 #### 二、Tapestry 5简介 Tapestry 5作为Tapestry系列的新版本,继承了前代的优秀特性,并在此基础上进行了多项...
Tapestry 5 强调易用性,不仅对终端用户友好,同时也优化了开发者的体验。它具有类重载特性,允许开发者在修改代码后立即看到效果,无需重新部署。此外,Tapestry 提供详细的异常报告,有助于快速定位和解决问题。 ...
这个是开发tapestry3所用的JAR包