Tapestry5之页面显示

这是一篇相对来说更加杂乱的文章了。基于最近的一个项目,把一些碰到的问题记下来。

1 t:Output和t:OutputRaw

他俩长得很像,但是差别不小。

Output是一个至少要有两个参数的Component,分别为:value和format。

Format就是java.text.Format。可以有两种方式来设定

a,在页面中,如:format="literal:yyyy-MM-dd";

b,在java类中声明,如:

@Property
private Format someFormat = new SimpleDateFormat("yyyy-MM-dd");

tml中:format="someFormat";

而OutputRaw只需要一个参数,就是value。它有另外一个特点,就是假如你给他设定的value值有特殊符号,它能够解析出来。

2 t:Loop 有两个必须的参数,source和value。

source,是一个实现了Iterable接口的类型。

value,这个有些意思。

如果我们写成

<t:loop t:source="someSource" t:value="someValue">
  some html code
</t:loop>

那么,我们需要在java代码中有一个@Property private String sameValue。

如果我们这个Loop就仅仅是为了显示,我们可以这样来写:

<t:loop t:source="someSource" t:value="var:someValue">
  some html code with "var:someValue" as an Entity
</t:loop>

这样的话,不需要再java代码中有someValue这个属性了。

究其原因,与Loop.java中的

    @Parameter(principal = true)
    private T value;

相关。这个@Parameter的String defaultPrefix() default BindingConstants.PROP;所以把它当成一个变量了。而修改为var的话,

Allows for temporary storage of information during the render only。

3 如果我们循环的一个实体中有一个属性还是一个可以循环的实体,这个时候代码应该如下:

        <t:loop t:source="source" t:value="one">
            ${one.letters}
            <t:loop t:source="one.numbers" t:value="var:number">
                ${var:number}
            </t:loop>
        </t:loop>

以上粗体蓝色部分,万万不能加上${}否则就会被解析成一个字符串了。

 

posted @ 2013-03-28 20:53  VoctrALs  阅读(355)  评论(0编辑  收藏  举报