`
hxzon
  • 浏览: 17886 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Tapestry5.1.0.5升级到Tapestry5.2.4初体验 -hxzon

阅读更多
Tapestry5.1.0.5升级到Tapestry5.2.4初体验 -hxzon

1,URLRewriterRule废弃,改用PageRenderLinkTransformer,
而PageRenderLinkTransformer返回值为PageRenderRequestParameters,
在处理css,js,图片文件时,路径改前缀为/assets/appVersionNum/ctx/时,
出现找不到/assets/页面的错误。最后只能通过构造一个伪页面解决。

路径重写代码:

    public PageRenderRequestParameters decodePageRenderRequest(Request request) {
        String path = request.getPath();
        // delete whitespace
        path = StringUtils.deleteWhitespace(path);
        logger.trace("path incoming:" + path);
        if (path.toLowerCase().contains("web-inf")) {
            logger.debug("path contains web-info,rewrite to root");
            return new PageRenderRequestParameters(Index.class.getSimpleName(), new EmptyEventContext(), false);
        }
        if (path.contains("/css/") && !path.contains("/assets/")) {
            path = path.substring(path.indexOf("/css"));
            logger.debug("path contains css ,rewrite to assets path:" + path);
            return new PageRenderRequestParameters(pageName, new OneStringEventContext(path), false);
        }
        return null;
    }

AssetDispatcher是在PageRenderLinkTransformer之前运行。

只处理静态文件的伪页面:

public class StaticSourceFile {
    @Inject
    private Logger logger;

    @OnEvent(value = EventConstants.ACTIVATE)
    protected Object response(String path) {
        InputStream targetFile = null;
        try {
            targetFile = FileUtils.openInputStream(new File(WebUtil.contextPath + "/" + path));
            return new FileStreamResponse("", targetFile);
        } catch (Exception e) {
            logger.error("文件不存在:{}", e.getMessage());
        }
        return null;
    }
}

2,自己写的TextFieldEx类在升级时出错,

    @Parameter(required = true, allowNull = false, defaultPrefix = BindingConstants.TRANSLATE)
    private FieldTranslator<Object> translate;

    @Parameter(defaultPrefix = BindingConstants.VALIDATE)
    private FieldValidator<Object> validate;

等域为空。

加入下述代码解决:

    //hxzon:fix bug when update to tapestry 5.2,but why?
    final Binding defaultTranslate() {
        return defaultProvider.defaultTranslatorBinding("value", resources);
    }

    final Binding defaultValidate() {
        return defaultProvider.defaultValidatorBinding("value", resources);
    }

3,AppModule下述代码出错,出错原因为自己的组件库包名与tapestry5.2.4的核心库包名共同字段少于2。

public static void contributeComponentClassResolver(Configuration<LibraryMapping> configuration) {
  configuration.add(new LibraryMapping("core", "org.hxzon.tapestry5"));
}

解决的方法一是改包名为org.apache.tapestry5.hxzon,但我的代码并非apache tapestry5的一部分。

解决的方法二是不用core,这样就导致以前的全部模板文件中,例如t:textfieldEx全部要改为t:h.textfieldEx。

这是此次升级最不舒服的地方。还是希望有方法将自己的库加入core中,不必用h.这样的前缀。

另外org.hxzon.tapestry5下的page无法识别。

PS:阅读faq时发现写成configuration.add(new LibraryMapping("", "org.hxzon.tapestry5"));

可以解决问题。但代码如下:

public static void contributeComponentClassResolver(Configuration<LibraryMapping> configuration) {
configuration.add(new LibraryMapping("h", "org.hxzon.tapestry5"));
configuration.add(new LibraryMapping("", "org.hxzon.tapestry5"));
}

前一次添加h前缀的库,是因为不这么做,它的组件所用的js文件等,路径会被写成

/material5/assets/3//components/SplitPageBar.js

导致js文件找不到。加入后路径为/material5/assets/3/h/components/SplitPageBar.js。

不知是否有更好的方法。
How do I store my page classes in a different package?

Tapestry is very rigid here; you can't. Page classes must go in root-package.pages, component classes in root-package.components, etc.

You are allowed to create sub-packages, to help organize your code better and more logically. For example, you might have _root-package.pages.account.ViewAccount, which would have the page name "account/viewaccount" 1

In addition, it is possible to define additional root packages for the application:

public static void contributeComponentClassResolver(Configuration<LibraryMapping> configuration) {
       configuration.add(new LibraryMapping("", "com.example.app.tasks"));
       configuration.add(new LibraryMapping("", "com.example.app.chat"));
}

LibraryMappings are used to resolve a library prefix to one or more package names. The empty string represents the application itself; the above example adds two additional root packages; you might see additional pages under com.example.app.tasks.pages, for example.

Tapestry doesn't check for name collisions, and the order the packages are searched for pages and components is not defined. In general, if you can get by with a single root package for your application, that is better.




分享到:
评论
2 楼 cui2100 2011-05-22  
 
1 楼 Linuxboy 2011-01-24  
同学,可否提供组件SplitPageBar给大伙儿学习一下啊?

相关推荐

    tapestry-bin-5.1.0.5

    【标题】"tapestry-bin-5.1.0.5" 指的是Apache Tapestry的一个特定版本的二进制发行包。Tapestry是一个开源的Java Web应用程序框架,它提供了一种基于组件的开发方式,用于构建动态、交互式的Web应用。 【描述】...

    tapestry5.1.0.5中文实例教程

    tapestry5.1.0.5中文实例教程,对于目前国内tapestry学习资源紧缺的情况,可谓填补了中文学习最大的空白,对于想学习tapestry5框架的人来说可谓字字如金,内容详尽,由浅入深,pdf格式

    tapestry 5.1.0.5 官方组件文档 天涯浪子

    来自:http://tapestry.apache.org/tapestry5.1/tapestry-core/ref

    tapestry5.1.0.5 官方api doc 文档 chm版 天涯浪子

    在官方下载的最新的tapestry5的api文档。。。。。。

    Tapestry5.0.16_API文档

    Tapestry5.0.16文档和大家一起学习

    tapestry-src-5.1.0.5.zip

    包含: tapestry 的源代码, tapestry集成spring2.0 tapestry快速启动 tapestry upload tapestry hibernate tapestry annotations

    tapestry5以上的帮助事例,帮助文档与spring衔接文档

    Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为中心的(Operation-centric) Servlet API.引用Tapestry网站上的一句话:"Tapestry用对象...

    tapestry5.1实例教程.docx

    最后,将工程添加到Tomcat服务器并配置好运行环境,你就可以启动服务器并调试你的第一个Tapestry5.1应用了。 ### 第二章:基础 Tapestry5.1的基础概念主要包括: **页面类**:每个Tapestry页面都与一个Java类关联...

    Tapestry 5.1 实例教程(全部)

    总之,Tapestry 5.1实例教程全面覆盖了从入门到精通的各个环节,无论你是初学者还是有经验的开发者,都能从中受益匪浅。通过学习和实践,你将能够熟练掌握Tapestry 5.1,构建出高效、易于维护的Web应用程序。

    Tapestry5.1实例教程

    【Tapestry 5.1 实例教程】 Tapestry 5.1 是一个基于Java的Web应用程序框架,由Apache软件基金会开发。它提供了一种高效、声明式的方法来构建动态、高性能的Web应用,强调组件化和强类型的安全性。Tapestry 5.1在...

    tapestry教程资料文档合集

    Tapestry5.1实例教程.pdf 前3章 ---------------------------- tapestry开发流程.docx ------------------------------- Tapestry开发指南0.8.pdf ---------------------------------- tapestry用户手册.pdf 很详细 ...

    史上最全面Tapestry学习教程

    - 访问 [http://tapestry.apache.org/](http://tapestry.apache.org/) 下载 tapestry-bin-5.1.0.5.zip。 - 备份以备后续使用。 ##### 1.5 新建 Web 工程 - **步骤**: - 打开 Eclipse,选择 File &gt; New &gt; ...

    Tapestry5.1+Spring2.5.6+Hibernate3.2.5写得简单CURD的程序

    《Tapestry5.1+Spring2.5.6+Hibernate3.2.5构建的简单CURD程序解析》 在Web开发领域,利用成熟的技术框架进行应用搭建是常见的实践方式。本文将深入探讨如何使用Tapestry5.1、Spring2.5.6和Hibernate3.2.5这三个...

    tapestry 5 ..........

    这通常涉及到添加Tapestry插件或者配置Maven项目。 #### 3. 创建第一个Tapestry项目 一旦环境准备好,就可以开始创建第一个Tapestry项目。这通常包括以下几个步骤: - **创建一个新的Maven项目**:在IDE中选择...

    Tapestry5.chm

    《Tapestry5.chm》是一个关于Tapestry 5框架的综合指南,它为开发者提供了详尽的文档和教程,旨在帮助用户深入理解和高效利用这个强大的Java Web开发框架。Tapestry 5是一个开源的、组件驱动的MVC框架,它强调了代码...

Global site tag (gtag.js) - Google Analytics