`
guofengcn
  • 浏览: 51054 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转载)Tapestry最新版5.1.0.5教程(十二):自定义前缀prefix

阅读更多
    在教程的第四部分我们已经粗略地介绍了Tapestry的前缀,其中提及最常用的两种literal和prop。这里顺便再介绍一下其他的几个前缀。

1、context,这个经常在引用图片的时候用到。
    比如:
<img src="${context:images/icon.png}"/> 

    这样就能够在页面上显示在web-inf/images/icon.png。

2、message,这个是需要I18N的应用必用的前缀。
${message:some-key}


3、var,用于定义生成一个临时变量。
    比如:
<li t:type="loop" source="1..10" value="var:index">${var:index}</li>

    如果没有加这个前缀var:的话,就需要在页面类中添加一个property: index以及相应的getter和setter。


    我们这次介绍自定义一个cycle前缀,这个可以用于在表格中显示不同背景的行(也就是斑马条)。
    比如:
<t:grid ....  rowClass="cycle:line1,line2">
...
</t:grid>

或者
<t:loop ...>
<div class="${cycle:line1,line2}">aaaa</div>
</tloop>

自定义prefix一般来说是3个步骤,
1、定义一个BindingFactory,这个需要实现BindingFactory接口;
2、定义一个Binding继承AbstractBinding;
3、注册这个Binding。

看一下具体的prefix的类:
CycleBindingFactory.java
import java.util.ArrayList;
import java.util.List;

import org.apache.tapestry5.Binding;
import org.apache.tapestry5.BindingConstants;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.ioc.Location;
import org.apache.tapestry5.services.BindingFactory;
import org.apache.tapestry5.services.BindingSource;

/** *//**
 * Implementation of the cycle: binding prefix -- we parse list of bindings
 * and generate delegate bindings for each element<br>
 * default binding is literal, other bindings can be used by specifying prefix.<br>
 * example: "cycle:prop:name,prop:lastName,sth,sth else"
 */
public class CycleBindingFactory implements BindingFactory {
    private final BindingSource _bindingSource;

    public CycleBindingFactory(BindingSource source){
        this._bindingSource = source;
    }
    
    public Binding newBinding(String description, ComponentResources container, ComponentResources component,
            String expression, Location location) {
        List<Binding> delegates = new ArrayList<Binding>();
        String[] bindingNames = expression.split(",");

        for (String bindingName : bindingNames){
            String defaultBinding = BindingConstants.LITERAL;

            Binding binding = _bindingSource.newBinding(description, container, component, defaultBinding, bindingName, location);
            delegates.add(binding);
        }
        
        CycleBinding cycleBinding = new CycleBinding(delegates);
        container.addPageLifecycleListener(cycleBinding);
            
        return cycleBinding;
    }
}

CycleBinding.java
import java.util.List;

import org.apache.tapestry5.Binding;
import org.apache.tapestry5.internal.bindings.AbstractBinding;
import org.apache.tapestry5.runtime.PageLifecycleListener;


public class CycleBinding extends AbstractBinding implements PageLifecycleListener {
    private final List<Binding> delegates;
    private int index = 0;

    public CycleBinding(List<Binding> delegates) {
        this.delegates = delegates;
    }

    public Object get() {
        Object ret = delegates.get(index).get();
        index ++; 
        if(index>=delegates.size()) index = 0;
        return ret;
    }
    
    @Override
    public boolean isInvariant() {
        return false;
    }
    
    @Override
    public Class<Object> getBindingType() {
        return Object.class;
    }


    public void containingPageDidDetach() {
        index=0;
    }

    public void containingPageDidAttach() {/**//*not interested*/}
    
    public void containingPageDidLoad() {/**//*not interested*/}
}

    Binding和BindingFactory写好了,注册后就可以使用了,注册的过程是在AppModel中添加以下一段代码:
 public static void contributeBindingSource(
            MappedConfiguration<String, BindingFactory> configuration,
            BindingSource bindingSource) {
        configuration.add("cycle",new CycleBindingFactory(bindingSource));
} 


原文地址:http://www.blogjava.net/usherlight/archive/2010/03/06/314700.html
分享到:
评论

相关推荐

    tapestry-bin-5.1.0.5

    【描述】"tapestry-bin-5.1.0.5" 描述了该版本是Tapestry框架的5.1.0.5版,这通常意味着它包含了该框架在那个时间点的所有功能和修复的错误。这个版本可能比之前的版本有所改进,包括性能优化、新功能添加以及对已有...

    tapestry5.1.0.5中文实例教程

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

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

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

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

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

    tapestry-src-5.1.0.5.zip

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

    Tapestry5.0.16_API文档

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

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

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

    tapestry5.1实例教程.docx

    《Tapestry5.1实例教程》是一份深入讲解Java Web开发框架Tapestry5.1的实践指导文档。Tapestry5.1是Apache软件基金会的一个开源项目,它为开发者提供了一种高度模块化、组件化的Web应用程序开发方式,强调了代码的...

    tapestry教程资料文档合集

    Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...

    Tapestry4开发指南.rar

    Tapestry4开发指南.rar Tapestry4开发指南.rar Tapestry4开发指南.rar

    Tapestry 5.1 实例教程(全部)

    **Tapestry 5.1 实例教程全览** Tapestry 5.1 是一个强大的Java Web应用程序框架,由Apache软件基金会维护。这个框架以其组件化、类型安全的URL映射、内置的依赖注入以及丰富的功能而备受赞誉。本教程全面地涵盖了...

    tapestry4和5学习资料

    2. **tapestry.pdf**: 这可能是Tapestry的官方文档或者某个时期的综合教程,包含了Tapestry的核心概念、设计模式、最佳实践等内容。可能包括了模板语言、组件库、服务注入、AOP(面向切面编程)特性、国际化和本地...

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

    ### 关于Tapestry 5的关键知识点 #### 1. 什么是Tapestry? Tapestry是一个开源框架,用于创建动态、稳健且高度可扩展的Java Web应用程序。它补充并建立在标准Java Servlet API之上,因此可以在任何Servlet容器或...

    Tapestry5.1实例教程

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

    史上最全面Tapestry学习教程

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

Global site tag (gtag.js) - Google Analytics