<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    云自無心水自閑

    天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
    posts - 288, comments - 524, trackbacks - 0, articles - 6
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    在教程的第四部分(http://www.tkk7.com/usherlight/archive/2009/06/20/283396.html)我們已經(jīng)粗略地介紹了Tapestry的前綴,其中提及最常用的兩種literal和prop。這里順便再介紹一下其他的幾個前綴.
    1、context,這個經(jīng)常在引用圖片的時候用到。比如:<img src="${context:images/icon.png}"/> 這樣就能夠在頁面上顯示在web-inf/images/icon.png
    2、message,這個是需要I18N的應(yīng)用必用的前綴。${message:some-key}
    3、var,用于定義生成一個臨時變量。比如:<li t:type="loop" source="1..10" value="var:index">${var:index}</li>。如果沒有加這個前綴var:的話,就需要在頁面類中添加一個property: index以及相應(yīng)的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,這個需要實現(xiàn)BindingFactory接口
    2、定義一個Binding繼承AbstractBinding
    3、注冊這個Binding

    看一下具體的prefix的類:

     1import java.util.ArrayList;
     2import java.util.List;
     3
     4import org.apache.tapestry5.Binding;
     5import org.apache.tapestry5.BindingConstants;
     6import org.apache.tapestry5.ComponentResources;
     7import org.apache.tapestry5.ioc.Location;
     8import org.apache.tapestry5.services.BindingFactory;
     9import org.apache.tapestry5.services.BindingSource;
    10
    11/**
    12 * Implementation of the cycle: binding prefix -- we parse list of bindings
    13 * and generate delegate bindings for each element<br>
    14 * default binding is literal, other bindings can be used by specifying prefix.<br>
    15 * example: "cycle:prop:name,prop:lastName,sth,sth else"
    16 */

    17public class CycleBindingFactory implements BindingFactory {
    18    private final BindingSource _bindingSource;
    19
    20    public CycleBindingFactory(BindingSource source){
    21        this._bindingSource = source;
    22    }

    23    
    24    public Binding newBinding(String description, ComponentResources container, ComponentResources component,
    25            String expression, Location location)
    26    {
    27        List<Binding> delegates = new ArrayList<Binding>();
    28        String[] bindingNames = expression.split(",");
    29
    30        for (String bindingName : bindingNames){
    31            String defaultBinding = BindingConstants.LITERAL;
    32
    33            Binding binding = _bindingSource.newBinding(description, container, component, defaultBinding, bindingName, location);
    34            delegates.add(binding);
    35        }

    36        
    37        CycleBinding cycleBinding = new CycleBinding(delegates);
    38        container.addPageLifecycleListener(cycleBinding);
    39            
    40        return cycleBinding;
    41    }

    42}

     1import java.util.List;
     2
     3import org.apache.tapestry5.Binding;
     4import org.apache.tapestry5.internal.bindings.AbstractBinding;
     5import org.apache.tapestry5.runtime.PageLifecycleListener;
     6
     7
     8public class CycleBinding extends AbstractBinding implements PageLifecycleListener{
     9    private final List<Binding> delegates;
    10    private int index = 0;
    11
    12    public CycleBinding(List<Binding> delegates) {
    13        this.delegates = delegates;
    14    }

    15
    16    public Object get() {
    17        Object ret = delegates.get(index).get();
    18        index ++
    19        if(index>=delegates.size()) index = 0;
    20        return ret;
    21    }

    22    
    23    @Override
    24    public boolean isInvariant() {
    25        return false;
    26    }

    27    
    28    @Override
    29    public Class<Object> getBindingType() {
    30        return Object.class;
    31    }

    32
    33
    34    public void containingPageDidDetach() {
    35        index=0;
    36    }

    37
    38    public void containingPageDidAttach() {/*not interested*/}
    39    
    40    public void containingPageDidLoad() {/*not interested*/}
    41}

    Binding和BindingFactory寫好了,注冊后就可以使用了,注冊的過程是在AppModel中添加以下一段代碼:
    1    public static void contributeBindingSource(
    2            MappedConfiguration<String, BindingFactory> configuration,
    3            BindingSource bindingSource
    4            )
    5    {
    6        configuration.add("cycle",new CycleBindingFactory(bindingSource));
    7    }
     




    主站蜘蛛池模板: 久久精品亚洲中文字幕无码麻豆| 毛片免费观看视频| 一区二区三区在线免费| 国产做国产爱免费视频| 99爱在线观看免费完整版| 免费阿v网站在线观看g| 免费人成年轻人电影| 久久亚洲精品国产精品| 久久免费观看国产精品| 国产jizzjizz免费视频| 久久久久久久亚洲Av无码| 24小时日本电影免费看| 亚洲无线一二三四区手机| 亚洲理论在线观看| 三年片免费观看大全国语| 男女做羞羞的事视频免费观看无遮挡| 亚洲精品视频免费看| 丁香花免费完整高清观看 | 大学生美女毛片免费视频| 亚洲热线99精品视频| 亚洲av永久中文无码精品| 国产一精品一av一免费爽爽| 免费一级特黄特色大片在线| 成人嫩草影院免费观看| 午夜无遮挡羞羞漫画免费| 一本色道久久综合亚洲精品| 亚洲av日韩精品久久久久久a| 18禁止看的免费污网站| 亚洲天堂2017无码中文| 一级A毛片免费观看久久精品| 亚洲午夜久久久久久久久久| 亚洲免费精彩视频在线观看| 国产精品亚洲αv天堂无码| 女人体1963午夜免费视频| 7777久久亚洲中文字幕| 免费h黄肉动漫在线观看| 久久国产乱子免费精品| 亚洲熟女综合色一区二区三区| 亚洲精品高清无码视频| 亚洲欧美aⅴ在线资源| 91成人免费观看网站|