Tapestry 最新版5.1.0.5教程(十二):自定义前缀prefix
2010-06-17 13:33
411 查看
在教程的第四部分(http://www.blogjava.net/usherlight/archive/2009/06/20/283396.html)我们已经粗略地介绍了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的类:
1
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import java.util.ArrayList;
2
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import java.util.List;
3
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
4
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.Binding;
5
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.BindingConstants;
6
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.ComponentResources;
7
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.ioc.Location;
8
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.services.BindingFactory;
9
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.services.BindingSource;
10
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
11
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedBlock.gif)
/** *//**
12
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
* Implementation of the cycle: binding prefix -- we parse list of bindings
13
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
* and generate delegate bindings for each element<br>
14
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
* default binding is literal, other bindings can be used by specifying prefix.<br>
15
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
* example: "cycle:prop:name,prop:lastName,sth,sth else"
16
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
*/
17
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedBlock.gif)
public class CycleBindingFactory implements BindingFactory
![](http://www.blogjava.net/Images/dot.gif)
{
18
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
private final BindingSource _bindingSource;
19
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
20
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public CycleBindingFactory(BindingSource source)
![](http://www.blogjava.net/Images/dot.gif)
{
21
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
this._bindingSource = source;
22
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
23
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
24
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
public Binding newBinding(String description, ComponentResources container, ComponentResources component,
25
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
String expression, Location location)
26
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.blogjava.net/Images/dot.gif)
{
27
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
List<Binding> delegates = new ArrayList<Binding>();
28
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
String[] bindingNames = expression.split(",");
29
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
30
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
for (String bindingName : bindingNames)
![](http://www.blogjava.net/Images/dot.gif)
{
31
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
String defaultBinding = BindingConstants.LITERAL;
32
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
33
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
Binding binding = _bindingSource.newBinding(description, container, component, defaultBinding, bindingName, location);
34
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
delegates.add(binding);
35
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
36
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
37
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
CycleBinding cycleBinding = new CycleBinding(delegates);
38
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
container.addPageLifecycleListener(cycleBinding);
39
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
40
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
return cycleBinding;
41
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
42
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
1
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import java.util.List;
2
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
3
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.Binding;
4
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.internal.bindings.AbstractBinding;
5
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.runtime.PageLifecycleListener;
6
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
7
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
8
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedBlock.gif)
public class CycleBinding extends AbstractBinding implements PageLifecycleListener
![](http://www.blogjava.net/Images/dot.gif)
{
9
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
private final List<Binding> delegates;
10
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
private int index = 0;
11
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
12
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public CycleBinding(List<Binding> delegates)
![](http://www.blogjava.net/Images/dot.gif)
{
13
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
this.delegates = delegates;
14
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
15
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
16
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public Object get()
![](http://www.blogjava.net/Images/dot.gif)
{
17
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
Object ret = delegates.get(index).get();
18
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
index ++;
19
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
if(index>=delegates.size()) index = 0;
20
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
return ret;
21
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
22
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
23
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
@Override
24
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public boolean isInvariant()
![](http://www.blogjava.net/Images/dot.gif)
{
25
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
return false;
26
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
27
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
28
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
@Override
29
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public Class<Object> getBindingType()
![](http://www.blogjava.net/Images/dot.gif)
{
30
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
return Object.class;
31
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
32
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
33
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
34
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public void containingPageDidDetach()
![](http://www.blogjava.net/Images/dot.gif)
{
35
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
index=0;
36
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
37
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
38
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public void containingPageDidAttach()
![](http://www.blogjava.net/Images/dot.gif)
{/**//*not interested*/}
39
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
40
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public void containingPageDidLoad()
![](http://www.blogjava.net/Images/dot.gif)
{/**//*not interested*/}
41
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
Binding和BindingFactory写好了,注册后就可以使用了,注册的过程是在AppModel中添加以下一段代码:
1
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
public static void contributeBindingSource(
2
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
MappedConfiguration<String, BindingFactory> configuration,
3
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
BindingSource bindingSource
4
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
)
5
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.blogjava.net/Images/dot.gif)
{
6
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
configuration.add("cycle",new CycleBindingFactory(bindingSource));
7
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
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的类:
1
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import java.util.ArrayList;
2
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import java.util.List;
3
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
4
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.Binding;
5
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.BindingConstants;
6
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.ComponentResources;
7
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.ioc.Location;
8
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.services.BindingFactory;
9
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.services.BindingSource;
10
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
11
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedBlock.gif)
/** *//**
12
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
* Implementation of the cycle: binding prefix -- we parse list of bindings
13
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
* and generate delegate bindings for each element<br>
14
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
* default binding is literal, other bindings can be used by specifying prefix.<br>
15
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
* example: "cycle:prop:name,prop:lastName,sth,sth else"
16
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
*/
17
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedBlock.gif)
public class CycleBindingFactory implements BindingFactory
![](http://www.blogjava.net/Images/dot.gif)
{
18
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
private final BindingSource _bindingSource;
19
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
20
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public CycleBindingFactory(BindingSource source)
![](http://www.blogjava.net/Images/dot.gif)
{
21
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
this._bindingSource = source;
22
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
23
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
24
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
public Binding newBinding(String description, ComponentResources container, ComponentResources component,
25
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
String expression, Location location)
26
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.blogjava.net/Images/dot.gif)
{
27
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
List<Binding> delegates = new ArrayList<Binding>();
28
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
String[] bindingNames = expression.split(",");
29
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
30
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
for (String bindingName : bindingNames)
![](http://www.blogjava.net/Images/dot.gif)
{
31
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
String defaultBinding = BindingConstants.LITERAL;
32
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
33
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
Binding binding = _bindingSource.newBinding(description, container, component, defaultBinding, bindingName, location);
34
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
delegates.add(binding);
35
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
36
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
37
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
CycleBinding cycleBinding = new CycleBinding(delegates);
38
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
container.addPageLifecycleListener(cycleBinding);
39
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
40
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
return cycleBinding;
41
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
42
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
1
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import java.util.List;
2
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
3
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.Binding;
4
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.internal.bindings.AbstractBinding;
5
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
import org.apache.tapestry5.runtime.PageLifecycleListener;
6
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
7
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
8
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedBlock.gif)
public class CycleBinding extends AbstractBinding implements PageLifecycleListener
![](http://www.blogjava.net/Images/dot.gif)
{
9
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
private final List<Binding> delegates;
10
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
private int index = 0;
11
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
12
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public CycleBinding(List<Binding> delegates)
![](http://www.blogjava.net/Images/dot.gif)
{
13
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
this.delegates = delegates;
14
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
15
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
16
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public Object get()
![](http://www.blogjava.net/Images/dot.gif)
{
17
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
Object ret = delegates.get(index).get();
18
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
index ++;
19
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
if(index>=delegates.size()) index = 0;
20
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
return ret;
21
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
22
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
23
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
@Override
24
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public boolean isInvariant()
![](http://www.blogjava.net/Images/dot.gif)
{
25
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
return false;
26
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
27
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
28
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
@Override
29
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public Class<Object> getBindingType()
![](http://www.blogjava.net/Images/dot.gif)
{
30
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
return Object.class;
31
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
32
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
33
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
34
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public void containingPageDidDetach()
![](http://www.blogjava.net/Images/dot.gif)
{
35
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
index=0;
36
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
37
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
38
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public void containingPageDidAttach()
![](http://www.blogjava.net/Images/dot.gif)
{/**//*not interested*/}
39
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
40
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedSubBlock.gif)
public void containingPageDidLoad()
![](http://www.blogjava.net/Images/dot.gif)
{/**//*not interested*/}
41
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
Binding和BindingFactory写好了,注册后就可以使用了,注册的过程是在AppModel中添加以下一段代码:
1
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
public static void contributeBindingSource(
2
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
MappedConfiguration<String, BindingFactory> configuration,
3
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
BindingSource bindingSource
4
![](http://writeblog.csdn.net/Images/OutliningIndicators/None.gif)
)
5
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://writeblog.csdn.net/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.blogjava.net/Images/dot.gif)
{
6
![](http://writeblog.csdn.net/Images/OutliningIndicators/InBlock.gif)
configuration.add("cycle",new CycleBindingFactory(bindingSource));
7
![](http://writeblog.csdn.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
相关文章推荐
- Tapestry 最新版5.1.0.5教程(十二):自定义前缀prefix
- Tapestry 最新版5.1.0.5教程(十一):自定义组件CheckBoxGroup
- Tapestry 最新版5.1.0.5教程(十一):自定义组件CheckBoxGroup
- Tapestry 最新版5.1.0.5教程(一)
- Tapestry 最新版5.1.0.5教程(八):权限控制框架的实现-基础篇
- Tapestry最新版5.1.0.5教程(一)
- Tapestry最新版5.1.0.5教程(八):权限控制框架的实现-基础篇
- Tapestry最新版5.1.0.5教程(二)
- Tapestry 最新版5.1.0.5教程(九):权限控制框架的实现-进阶篇
- Tapestry最新版5.1.0.5教程(二)
- Tapestry最新版5.1.0.5教程(九):权限控制框架的实现-进阶篇
- Tapestry 最新版5.1.0.5教程(二)续
- Tapestry最新版5.1.0.5教程(二)续
- Tapestry 最新版5.1.0.5教程(十):页面间传递多个参数
- Tapestry 最新版5.1.0.5教程(三)
- Tapestry 最新版5.1.0.5教程(十):页面间传递多个参数
- Tapestry最新版5.1.0.5教程(三)
- Tapestry 最新版5.1.0.5教程(四)
- Tapestry最新版5.1.0.5教程(四)
- Tapestry 最新版5.1.0.5教程(五):Hello示例程序的剖析