在教程的
第四部分我们已经粗略地介绍了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
tapestry5.1.0.5中文实例教程,对于目前国内tapestry学习资源紧缺的情况,可谓填补了中文学习最大的空白,对于想学习tapestry5框架的人来说可谓字字如金,内容详尽,由浅入深,pdf格式
在官方下载的最新的tapestry5的api文档。。。。。。
来自:http://tapestry.apache.org/tapestry5.1/tapestry-core/ref
包含: tapestry 的源代码, tapestry集成spring2.0 tapestry快速启动 tapestry upload tapestry hibernate tapestry annotations
Tapestry5.0.16文档和大家一起学习
Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为中心的(Operation-centric) Servlet API.引用Tapestry网站上的一句话:"Tapestry用对象...
java tapestry5.1实例教程
Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...
Tapestry4开发指南.rar Tapestry4开发指南.rar Tapestry4开发指南.rar
Tapestry 不必关心链接!不必关心请求(http request)到了哪里!不必关心响应(http response)要转向哪里!Tapestry构建于底层的request-resonse模式,基于Servlet技术,抽象出面向组件开发的模型。Tapestry关心的是:...
Tapestry 5.1 实例教程(全部) Tapestry 5.1入门教程,包含基础入门及一些高级组件的使用教程,是学习Tapestry5.1不可多得的教程!
Tapestry 5.1 实例教程 前三章
最近在学习Tapestry,希望对你们有用
Packt.Publishing.Tapestry.5.Building.Web.Applications.Jan.2008.RETAiL.eBOOk-sUppLeX.pdf,虽然是英文的,只有200多页,很快就可以看完,做Tapestry的项目一般没有问题了
Tapestry5开发文档.pdf